題解 P3385 模板 負環

2022-01-30 18:20:41 字數 893 閱讀 8110

這題有毒!!!!!

spfa判負環常用的有兩種,一種是判斷鬆弛次數,但它會繞環好多次,另一種是判斷最短路徑的長度,只要繞環一次,前一種本題過不了。

判斷最短路徑的長度的意思就是用乙個len陣列記錄從源點到當前節點的最短路徑經過的邊數,並在鬆弛時令len[v]=len[u]+1。若len[v]>=n則必然存在負環。

為了解決圖不聯通的問題,引入乙個新的陣列searched,searched[v]表示是否從v出發搜尋過,每一次找乙個searched值為false的點開始搜。同時,還可以用searched陣列進行一些剪枝....(不過本題的鬼畜資料不需要)

有意思的是,第55行的check()換成spfa(1)也能過.......upd:是我沒看題目.jpg

正解:

#include#include#include#includeusing namespace std;

const int maxn=2005;

const int maxm=6005;

struct edge ;

edge *g[maxn],mem[maxm],*ecnt;

inline void addedge(int u,int v,int w)

int t,n,m;

int dis[maxn],len[maxn];

bool inq[maxn],searched[maxn];

bool spfa(int s)

}} return false;

}bool check()

int main()

puts(check()?"ye5":"n0");

} return 0;

}

P3385 模板 負環

p3385 模板 負環 題目描述 暴力列舉 spfa bellman ford 奇怪的貪心 超神搜尋 尋找乙個從頂點1所能到達的負環,負環定義為 乙個邊權之和為負的環。輸入格式 第一行乙個正整數t表示資料組數,對於每組資料 第一行兩個正整數n m,表示圖有n個頂點,m條邊 接下來m行,每行三個整數a...

P3385 模板 負環

bellman判負環 bellman ford判負環 洛谷3385 尋找乙個從頂點1所能到達的負環,負環定義為 乙個邊權之和為負的環。從1號頂點開始的負環,若w 0則為單向,否則雙向 存在負環則輸出一行 ye5 不含引號 否則輸出一行 n0 不含引號 14 3 2 3 1 3 4 1 4 2 1 n...

P3385 模板 負環

暴力列舉 spfa bellman ford 奇怪的貪心 超神搜尋 輸入格式 第一行乙個正整數t表示資料組數,對於每組資料 第一行兩個正整數n m,表示圖有n個頂點,m條邊 接下來m行,每行三個整數a b w,表示a b有一條權值為w的邊 若w 0則為單向,否則雙向 輸出格式 共t行。對於每組資料,...