#include <bits/stdc++.h> using namespace std; const int maxn=1e5+10; struct node{ int next,to,val; }e[maxn<<1]; int head[maxn<<1],k; void add(int from,int to,int val){ e[++k]={ head[from],to,val }; head[from]=k; } int vis[maxn],dis[maxn<<1],cnt[maxn<<1]; int n,m; bool spfa(){ queue<int>q; for(int i=1;i<=n;i++){ q.push(i);vis[i]=true; } while(!q.empty()){ int t=q.front();q.pop(); vis[t]=false; for(int i=head[t];i;i=e[i].next){ int x=e[i].to,y=e[i].val; if(dis[x]>dis[t]+y){ dis[x]=dis[t]+y; cnt[x]=cnt[t]+1; if(cnt[x]>n-1)return true; if(!vis[x]){ q.push(x); vis[x]=true; } } } } return false; } int main() { ios::sync_with_stdio(false); cin>>n>>m; while(m--){ int u,v,val; cin>>u>>v>>val; add(u,v,val); } if(spfa())cout<<"Yes"; else cout<<"No"; return 0; }
原文:https://www.cnblogs.com/qq1415584788/p/14797065.html