說明一下,這個例題用下面的方法是過不了的,只能過掉25分因為資料加強了,而我不會寫bfs版spfa判負環
但是我覺得會dfs版的就行了,反正對於隨機資料dfs版的絕對吊打bfs版的
只不過這道題的資料不是隨機的,是有人惡意新增的
我們利用dfs強行進行鬆弛操作(我感覺已經不能叫他spfa了)
如果在一條路徑上乙個點被重複訪問過了,那就是說明出現了負環
輸出ye5就行了
#include #include#include
#include
const
int maxnode = 2007
;const
int maxedge = 3007*2
;using
namespace
std;
intx, f;
char
c;inline
intread()
while (c >= '
0' && c <= '9'
)
return x *f;
}int
t, n, m, u[maxedge], v[maxedge], w[maxedge];
intfirst[maxnode], nur[maxedge], dis[maxnode];
bool
vis[maxnode], book;
inline
void addedge(int f, int
i) int
k;inline
void spfa(int
s) k =nur[k];
}vis[s] = 0;}
intmain()
}for(int i=1; i<=n&&!book; i++)
spfa(i);
(book)?(puts("
ye5")):(puts("n0"
)); }
return0;
}
關於spfa 判斷負環
判斷給定的有向圖中是否存在負環。利用spfa 演算法判斷負環有兩種方法 1 spfa 的dfs 形式,判斷條件是存在一點在一條路徑上出現多次。2 spfa 的bfs 形式,判斷條件是存在一點入隊次數大於總頂點數。如下 法 1 spfa 的dfs 形式 include include include ...
P3385 模板 負環 spfa判斷負環
p3385 模板 負環 暴力列舉 spfa bellman ford 奇怪的貪心 超神搜尋 尋找乙個從頂點1所能到達的負環,負環定義為 乙個邊權之和為負的環。輸入格式 第一行乙個正整數t表示資料組數,對於每組資料 第一行兩個正整數n m,表示圖有n個頂點,m條邊 接下來m行,每行三個整數a b w,...
最短路專題 spfa判斷負環
題目大意 有多種匯幣,匯幣之間可以交換,這需要手續費,當你用100a幣交換b幣時,a到b的匯率是29.75,手續費是0.39,那麼你可以得到 100 0.39 29.75 2963.3975 b幣。問s幣的金額經過交換最終得到的s幣金額數能否增加 貨幣的交換是可以重複多次的,如果有乙個環使得某種貨幣...