P3385 模板 負環

2021-09-26 05:28:52 字數 1356 閱讀 8600

p3385 【模板】負環

題目描述

暴力列舉/spfa/bellman-ford/奇怪的貪心/超神搜尋

尋找乙個從頂點1所能到達的負環,負環定義為:乙個邊權之和為負的環。

輸入格式

第一行乙個正整數t表示資料組數,對於每組資料:

第一行兩個正整數n m,表示圖有n個頂點,m條邊

接下來m行,每行三個整數a b w,表示a->b有一條權值為w的邊(若w<0則為單向,否則雙向)

輸出格式

共t行。對於每組資料,存在負環則輸出一行"ye5"(不含引號),否則輸出一行"n0"(不含引號)。

輸入輸出樣例

輸入 #1 複製

23 4

1 2 2

1 3 4

2 3 1

3 1 -3

3 31 2 3

2 3 4

3 1 -8

輸出 #1 複製

n0ye5

說明/提示

n\leq 2000

n≤2000

m\leq 3000

m≤3000

-10000\leq w\leq 10000

−10000≤w≤10000

t\leq 10

t≤10

建議複製輸出格式中的字串。 本題資料感謝@negiizhao的精心構造,請不要使用玄學演算法 本題資料有更新

思路:我是用的bellman_fordford判斷的

#include #include #include using namespace std;

struct edgest[100000];

const int inf = 0x3f;

int dis[2005];

int cnt = 0;

int n,m,t;

bool bellman_ford()

} if(flag == 0) return false;

for(int i = 1;i <= n;i++)

dis[1] = 0;

for(int i = 1;i < n;i++)

if(cost >= 0)

}} if(flag == 0) return false;//沒有負環路

} for(int i = 1;i <= cnt;i++)

if(st[i].cost >= 0)

} }return false;//沒有負環路

}void add(int x,int y,int z)

int main()

if(bellman_ford())else

} return 0;

}

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行。對於每組資料,...

題解 P3385 模板 負環

這題有毒!spfa判負環常用的有兩種,一種是判斷鬆弛次數,但它會繞環好多次,另一種是判斷最短路徑的長度,只要繞環一次,前一種本題過不了。判斷最短路徑的長度的意思就是用乙個len陣列記錄從源點到當前節點的最短路徑經過的邊數,並在鬆弛時令len v len u 1。若len v n則必然存在負環。為了解...