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則必然存在負環。為了解...