給定乙個n個點m條邊的有向圖,圖中可能存在重邊和自環, 邊權可能為負數。
請你判斷圖中是否存在負權迴路。
輸入格式
第一行包含整數n和m。
接下來m行每行包含三個整數x,y,z,表示存在一條從點x到點y的有向邊,邊長為z。
輸出格式
如果圖中存在負權迴路,則輸出「yes」,否則輸出「no」。
資料範圍
1≤n≤2000
,1≤m≤10000
,圖中涉及邊長絕對值均不超過10000。
輸入樣例:33
12-1
2343
1-4輸出樣例:
yes
前言:如果你不了解spfa演算法,請先看這篇文章:好了,spfa判負環的原理十分簡單,思路就是在spfa的基礎上加乙個cnt
陣列來判斷乙個點是否形成負環
推薦看的blog:
具體**如下:
#include
using
namespace std;
const
int n=
2010
,m=10010
;int n,m,h[n]
,w[m]
,e[m]
,ne[m]
,idx;
int dist[n]
,cnt[n]
;bool st[n]
;void
add(
int a,
int b,
int c)
bool
spfa()
while
(!q.
empty()
)}}}
return
false;}
intmain()
if(spfa()
) cout<<
"yes"
;else cout<<
"no"
;return0;
}
spfa(判負環變形)
題目鏈結 題意 n種貨幣,m種交換 s v 邊 u v r1 c1 r2 c2表示u貨幣換成v貨幣需要c1手續費和交換率r1,v換u為c2,r2.轉換公式 val v val u c1 r1 初始有s貨幣v枚。問能否通過一系列的交換,可以獲得比初始更多的錢?解法 include include in...
模板 負環(spfa)
暴力列舉 spfa bellman ford 奇怪的貪心 超神搜尋 輸入格式 第一行乙個正整數t表示資料組數,對於每組資料 第一行兩個正整數n m,表示圖有n個頂點,m條邊 接下來m行,每行三個整數a b w,表示a b有一條權值為w的邊 若w 0則為單向,否則雙向 輸出格式 共t行。對於每組資料,...
TT 的美夢(SPFA判負環)
這一晚,tt 做了個美夢!在夢中,tt 的願望成真了,他成為了喵星的統領!喵星上有 n 個商業城市,編號 1 n,其中 1 號城市是 tt 所在的城市,即首都。喵星上共有 m 條有向道路供商業城市相互往來。但是隨著喵星商業的日漸繁榮,有些道路變得非常擁擠。正在 tt 為之苦惱之時,他的魔法小貓咪提出...