| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
参照别人AC的程序,怎么自己写的就老实WA?太郁闷了,太蛋疼了!#include<iostream>
#include<cstring>
#include<fstream>
#define INFINITY 10001
using namespace std;
class weight{
public:
int S;
int E;
int T;
}edges[5200];
int nEdges;
int dist[1001];
//参数n,图中的节点总数
bool Bellman_Ford(int n) {
bool beRelaxed;
dist[1] = 0;
for(int i = 0; i < n-1; ++i) { //n-1次循环
beRelaxed = false;//标记循环中是否有松弛操作
for(int j = 0; j < nEdges; ++j) {
if(dist[edges[j].E] > dist[edges[j].S] + edges[j].T) {
dist[edges[j].E] = dist[edges[j].S] + edges[j].T;
beRelaxed = true;
}
if(!beRelaxed) break;//不再需要松弛了,剪枝
}
}
for(int j = 0; j < nEdges; ++j) {
if(dist[edges[j].E] > dist[edges[j].S] + edges[j].T) {
return true; //存在负环,可以穿越时空
}
}
return false;
}
int main() {
//ifstream cin("in.txt");
int F, N, M, W;
int i;
int u, v, w;
cin>>F;
while(F--) {
nEdges = 0;
for(i = 0; i < 1001; ++i) {
dist[i] = INFINITY;
}
cin>>N>>M>>W;
for(i = 0; i < M; ++i) {
cin>>u>>v>>w;
edges[nEdges].S = u;
edges[nEdges].E = v;
edges[nEdges++].T = w;
edges[nEdges].S = v;
edges[nEdges].E = u;
edges[nEdges++].T = w;
}
for(i = 0; i < W; ++i) {
cin>>u>>v>>w;
edges[nEdges].S = u;
edges[nEdges].E = v;
edges[nEdges++].T = -w; //时间倒流
}
if(Bellman_Ford(N)) {
cout<<"YES"<<endl;
} else {
cout<<"NO"<<endl;
}
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator