#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#define inf 0x3f3f3f3f
using namespace std;
struct node
{
int u, v, w;
}p[8000];
int e, n;
int dis[510];
void Bellman()
{
int i, j;
for(i = 1;i <= n;i++){
if(i == 1) dis[i] = 0;
else dis[i] = inf;
}
for(i = 0;i < n;i++){
for(j = 0;j < e;j++){
if(dis[p[j].v] > dis[p[j].u]+p[j].w){
dis[p[j].v] = dis[p[j].u]+p[j].w;
if(i == n-1){//判断是否有负环的
printf("YES\n");
return;
}
}
}
}
printf("NO\n");
return;
}
int main()
{
int t;
cin >> t;
int m, w;
int a, b, c;
int i;
while(t--){
cin >> n >> m >> w;
e = 0;
for(i = 0;i < m;i++){
scanf("%d %d %d", &a, &b, &c);
p[e].u = a;
p[e].v = b;
p[e].w = c;
e++;
p[e].u = b;
p[e].v = a;
p[e].w = c;
e++;
}
for(i = 0;i < w;i++){
scanf("%d %d %d", &a, &b, &c);
p[e].u = a;
p[e].v = b;
p[e].w = -c;
e++;
}
Bellman();
}
return 0;
}
POJ 3259 Wormholes Bellman判断是否有负环
最新推荐文章于 2017-04-26 09:24:58 发布