zoj 2770
2013-12-28 14:38
218 查看
#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 = 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 - dist[0]<<endl; } }
相关文章推荐
- ZOJ 2770 Burn the Linked Camp 差分约束 ZOJ排名第一~
- ZOJ 2770 差分约束+SPFA
- ZOJ2770 Burn the Linked Camp(差分约束)
- zoj 2770 Burn the Linked Camp
- 【ZOJ】2770 Burn the Linked Camp 差分约束
- zoj 2770 Burn the Linked Camp(火烧连营)
- ZOJ 2770 Burn the Linked Camp 差分约束 ZOJ排名第一~
- ZOJ 2770--Burn the Linked Camp 【差分约束】
- ZOJ2770
- zoj 2770 Burn the Linked Camp
- zoj2770
- zoj2770解题报告(差分约束)
- zoj 2770 Burn the Linked Camp
- 差分约束-zoj-2770
- ZOJ 2770_Burn the Linked Camp
- zoj 2770 Burn the Linked Camp 【差分约束】
- zoj 2770 差分约束
- zoj 2770 Burn the Linked Camp 差分约束系统
- zoj2770,差分约束系统
- zoj 2770(差分约束)