#include <iostream>
#include <cstring>
#include <cstdio>
#include<algorithm>
using namespace std;
#define Inf 0x3f3f3f3f
int f;
int n, m, w;
int ma[505][505];
int Floyd()
{
for(int k=1; k<=n; k++)
for(int i=1; i<=n; i++)
{
for(int j=1; j<=n; j++)
{
if(ma[i][j]>ma[i][k]+ma[k][j])
ma[i][j]=ma[i][k]+ma[k][j];
}
if(ma[i][i]<0) return 1;
}
return 0;
}
int main()
{
scanf("%d",&f);
while(f--)
{
int s, e, t;
memset(ma, Inf, sizeof(ma));
scanf("%d%d%d",&n,&m,&w);
for(int i=1; i<=n; i++)
ma[i][i]=0;
for(int i=1; i<=m; i++)
{
scanf("%d%d%d",&s,&e,&t);
if(ma[s][e]>t){
ma[s][e]=t;
ma[e][s]=t;}
}
for(int i=1; i<=w; i++)
{
scanf("%d%d%d",&s,&e,&t);
ma[s][e]=-t;
}
int p=Floyd();
if(!p)
printf("NO\n");
else
printf("YES\n");
}
return 0;
}
Floyd算法--最短路径
最新推荐文章于 2021-05-12 15:34:19 发布