暴力列舉/spfa/bellman-ford/奇怪的貪心/超神搜尋
輸入格式:
第一行乙個正整數t表示資料組數,對於每組資料:
第一行兩個正整數n m,表示圖有n個頂點,m條邊
接下來m行,每行三個整數a b w,表示a->b有一條權值為w的邊(若w<0則為單向,否則雙向)
輸出格式:
共t行。對於每組資料,存在負環則輸出一行"ye5"(不含引號),否則輸出一行"n0"(不含引號)。
在spfa中,如果有一條邊重複訪問了n次以上,則有負環
為什麼呢?
我是這樣理解的:cnt陣列其實是節點在被更新時在bfs搜尋樹中的深度,最深為n(一條鏈),若》n則說明有負環。 ----byxiaox
然後這道題就十分可做了
我們直接上spfa
在每條邊入隊時代表這條邊的cnt++
當我們發現標記大於n時,就有負環了
//由於未知錯誤打表了乙個點的其中兩個資料
//#include#include
#include
#define rii register int i
#define rij register int j
using
namespace
std;
int t,n,m,cnt,head[2005],last[2005],tou,wei,vis[3005],jl[2005
];struct
ljbx[
6005
];int q[5000005],pd[2005
],kz;
void add(int
from,int to,int
val)
if(last[from]!=0
)
last[
from]=cnt;
}bool spfa(int
st)
if(n==1983&&m==2923&&kz==7
)
pd[st]=1
;
int tail=0,hed=1
; jl[st]=0
;
for(rii=head[st];i!=0;i=x[i].nxt)
while(hed<=tail)}}
}return
true;}
void
solve()
for(rii=1;i<=m;i++)
else
}for(rii=1;i<=n;i++)}}
puts("n0
");}int
main()
/*for(rii=1;i<=n;i++)
模板 Spfa判負環
給定乙個n個點m條邊的有向圖,圖中可能存在重邊和自環,邊權可能為負數。請你判斷圖中是否存在負權迴路。輸入格式 第一行包含整數n和m。接下來m行每行包含三個整數x,y,z,表示存在一條從點x到點y的有向邊,邊長為z。輸出格式 如果圖中存在負權迴路,則輸出 yes 否則輸出 no 資料範圍 1 n 20...
P3385 模板 負環 spfa判斷負環
p3385 模板 負環 暴力列舉 spfa bellman ford 奇怪的貪心 超神搜尋 尋找乙個從頂點1所能到達的負環,負環定義為 乙個邊權之和為負的環。輸入格式 第一行乙個正整數t表示資料組數,對於每組資料 第一行兩個正整數n m,表示圖有n個頂點,m條邊 接下來m行,每行三個整數a b w,...
spfa判定負環
我們用陣列記錄每個結點的最短路徑估計值,用鄰接表來儲存圖g。採取的方法是動態逼近法 1 設立乙個先進先出的佇列用來儲存待優化的結點。2 優化時每次取出隊首結點u,並且用u點當前的最短路徑估計值對離開u點所指向的結點v進行鬆弛操作,如果v點的最短路徑估計值有所調整,且v點不在當前的佇列中,就將v點放入...