spfa判断负环
Posted 20203246
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spfa判断负环相关的知识,希望对你有一定的参考价值。
#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; }
以上是关于spfa判断负环的主要内容,如果未能解决你的问题,请参考以下文章