#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