看了一天秘密糊糊
#include <stdio.h>
#include <string.h>
#include
<stdlib.h>
#define N 900001
struct node
{
int u,v,w;
}q[100001];
int dis[10001];
int n,m,w1,count=0;
int
B()
{
int flag=0;
for(int
i=1;i<=n;i++)
dis[i]=N;
dis[1]=0;
for(int
i=1;i<=n-1;i++)
{
flag=0;
for(int
j=0;j<count;j++)
{
if(dis[q[j].v]>dis[q[j].u]+q[j].w)//这里u,v是不能颠倒的,因为
{
dis[q[j].v]=dis[q[j].u]+q[j].w;
flag=1;
}
}
/* for(int
j=0;j<n;j++)
printf(".%d",dis[j]);*/
if(!flag)
break;
}
for(int
i=0;i<count;i++)
{
if(dis[q[i].v]>dis[q[i].u]+q[i].w)
return 0;
}
return 1;
}
int
main()
{
int x,y,x1,T;
scanf("%d",&T);
while(T--)
{
count=0;
scanf("%d%d%d",&n,&m,&w1);
while(m--)
{
scanf("%d%d%d",&x,&y,&x1);
q[count].u=x;
q[count].v=y;
q[count++].w=x1;
q[count].u=y;
q[count].v=x;
q[count++].w=x1;
}
while(w1--)
{
scanf("%d%d%d",&x,&y,&x1);
q[count].u=x;
q[count].v=y;
q[count++].w=-x1;//他是有方向的
}
int
t=B();
if(t==0)
printf("YES\n");
else
printf("NO\n");
}
return
0;
}
原文地址:http://www.cnblogs.com/zhangmingcheng/p/3778684.html