求助在座各位大佬 (:
#include<bits/stdc++.h>
using namespace std;
int dis[10005],q[40005],first[10005];
int t,m,n,w,tot,rdcs[10005];
bool ex[10005];
struct node{
int next,to,v;
}e[20005];
void inser(int x,int y,int z)
{
tot++;
e[tot].next=first[x];
first[x]=tot;
e[tot].to=y;
e[tot].v=z;
}
bool spfa(int i)
{
dis[i]=0;
q[1]=i;
ex[i]=true;
rdcs[i]++;
int head=0,tail=1;
while(head<tail)
{
head++;
int x=q[head];
ex[x]=false;
for(int u=first[x];u;u=e[u].next)
{
int to=e[u].to;
if(dis[to]>dis[x]+e[u].v)
{
dis[to]=dis[x]+e[u].v;
if(!ex[to])
{
ex[to]=true;
q[++tail]=to;
rdcs[to]++;
if(rdcs[to]>n) return true;
}
}
}
}
return false;
}
int main()
{
int x,y,z;
scanf("%d",&t);
while(t--)
{
tot=0;
memset(e,0,sizeof(e));
memset(first,0,sizeof(first));
memset(rdcs,0,sizeof(rdcs));
memset(ex,false,sizeof(ex));
memset(dis,127,sizeof(dis));
memset(q,0,sizeof(q));
scanf("%d%d%d",&n,&m,&w);
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
inser(x,y,z);
inser(y,x,z);
}
for(int i=1;i<=w;i++)
{
scanf("%d%d%d",&x,&y,&z);
inser(x,y,-z);
}
int f=0;
for(int i=1;i<=n;i++)
{
if(spfa(i)) f=1;
}
if(f==1) cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}