zoj 2770 Burn the Linked Camp 差分约束系统

我的新博客:http://xiang578.github.io/

#include "stdio.h"
#include "string.h"
#include "algorithm"
using namespace std;
const int inf=1<<30;

struct name
{
    int u,v,w;
}e[25000];
int n,m,c[10005],d[10005],dist[10005],k;

int main()
{
    int i,j,u,v,w,t;
    bool flag;
    while(~scanf("%d%d",&n,&m))
    {
        for(i=1,k=0;i<=n;i++)
        {
            scanf("%d",&c[i]);
            e[k].u=i-1;
            e[k].v=i;
            e[k].w=c[i];
            k++;

            e[k].u=i;
            e[k].v=i-1;
            e[k].w=0;
            k++;

            d[i]=d[i-1]+c[i];
        }

        for(i=0;i<m;i++)
        {
            scanf("%d%d%d",&u,&v,&w);
            e[k].u=v;
            e[k].v=u-1;
            e[k].w=-w;
            k++;

            e[k].u=u-1;
            e[k].v=v;
            e[k].w=d[v]-d[u-1];
            k++;
        }

        for(i=0;i<=n;i++)
        {
            dist[i]=inf;
        }
        dist[0]=0;
        dist[n]=0;

        for(i=0;i<n;i++)
        {
            for(j=0;j<k;j++)
            {
                if(dist[e[j].u]!=inf&&dist[e[j].u]+e[j].w<dist[e[j].v])
                {
                    dist[e[j].v]=dist[e[j].u]+e[j].w;
                }
            }
        }

        for(i=0,flag=1; i<k; i++)
        {
            if(dist[e[i].u]!=inf&&dist[e[i].u]+e[i].w<dist[e[i].v])
            {
                flag=0;
                break;
            }
        }
        if(flag)
            printf("%d\n",dist[n]-dist[0]);
        else
            printf("Bad Estimations\n");
    }
    return 0;
}

我的新博客:http://xiang578.github.io/

你可能感兴趣的:(zoj 2770 Burn the Linked Camp 差分约束系统)