zoj 2770

来源:互联网 发布:手机淘宝如何关闭店铺 编辑:程序博客网 时间:2024/06/08 06:21
#include <iostream>#include <cstring>#include <cstdio>using namespace std;const int MAXN = 1010;const int MAXM = 23000;const int INF = 100000000;struct Edge{    int u, v, w;}edges[MAXM];int n;int EN;int dist[MAXN];int S[MAXN];void Inite(){    EN = 0;    for(int i = 0; i < n; ++i)    {        dist[i] = INF;    }    S[0] = 0;    S[n] = 0;}bool Bellman_Ford(){    int i, j;    for(i = 0; i < n; ++i)    {        for(j = 0; j < EN; ++j)            if(dist[ edges[j].u ] < INF && dist[ edges[j].u ] + edges[j].w < dist[ edges[j].v ])                dist[ edges[j].v ] = dist[edges[j].u] + edges[j].w;    }    for(j = 0; j < EN; ++j)        if(dist[ edges[j].u ] < INF && dist[ edges[j].u ] + edges[j].w < dist[ edges[j].v ])            return false;    return true;}int main(){    int i;    int m;    int C[MAXN];    int u, v, w;    while(~scanf("%d %d", &n, &m))    {        Inite();        memset(C, 0, sizeof(C));        for(i = 1; i <= n; ++i)        {            cin>>C[i];            edges[EN].u = i-1;            edges[EN].v = i;            edges[EN++].w = C[i];            edges[EN].u = i;            edges[EN].v = i-1;            edges[EN++].w = 0;            S[i] = S[i-1] + C[i];        }        for(i = 0; i < m; ++i)        {            cin>>u>>v>>w;            edges[EN].u = v;            edges[EN].v = u - 1;            edges[EN++].w = -w;            edges[EN].u = u-1;            edges[EN].v = v;            edges[EN++].w = S[v] - S[u-1];        }        if(!Bellman_Ford())            cout<<"Bad Estimations"<<endl;        else            cout<<dist[n] - dist[0]<<endl;    }}

0 0
原创粉丝点击