#include<bits/stdc++.h>
using namespace std;
struct edge
{
int to,len,next;
}edge[2000000];
long long n,m,s,num,tim[2000000],head[2000000],book[2000000],dis[2000000],b[20000000];
priority_queue<pair<long long,long long> > q;
void sett()
{
n=m=s=num=0;
memset(tim,0,sizeof(tim));
memset(book,0,sizeof(book));
memset(head,0,sizeof(head));
}
void add(long long u,long long v,long long w)
{
edge[++num].to=v;
edge[num].len=w;
edge[num].next=head[u];
head[u]=num;
}
bool spfa(long long s)
{
long long h=1,t=1;
for(long long i=1;i<=n;i++)
dis[i]=2147483647;
dis[s]=0;
book[s]=1;
b[t++]=s;
tim[s]++;
while(h<t)
{
long long x=b[h++];
book[x]=0;
if(tim[x]>=n)
return 1;
for(long long i=head[x];i;i=edge[i].next)
if(dis[edge[i].to]>dis[x]+edge[i].len)
{
dis[edge[i].to]=dis[x]+edge[i].len;
if(!book[edge[i].to])
{
b[t++]=edge[i].to;
tim[edge[i].to]++;
if(tim[edge[i].to]>=n)
return 1;
book[edge[i].to]=1;
}
}
}
return 0;
}
int main()
{
int ti;
cin>>ti;
while(ti--)
{
cin>>n>>m;
for(long long i=1;i<=m;i++)
{
long long u,v,w;
cin>>u>>v>>w;
add(u,v,w);
if(w>=0)
add(v,u,w);
}
if(spfa(1))
cout<<"YE5";
else
cout<<"N0";
cout<<endl;
sett();
}
return 0;
}
来源:https://www.cnblogs.com/s-t-a-r-d-u-s-t/p/11455286.html