#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