LightOJ 1074 spfa判斷負環

2022-03-21 10:12:49 字數 937 閱讀 2248

題意是給出乙個有向圖 給出一定的邊 可以求出邊權 求單源最短路 如果<3 或者 達不到 輸出問號 不然輸出dis[v]

一開始耿直的寫了乙個dij交上去 還過了樣例 然後wa掉 看了看題 發現其中有負權邊 並且應該是可以達到負環的 比如3->1->2->3 所以<3是判斷 這個點能否是負的 或者 它的確小於3

如果乙個點在負環中 那麼dis[it]可以是無限小 那麼它所能到達的所有點 都可以是無限小 

使用spfa判斷 當乙個點被證實是在負環中 dfs它 把它與它能到達的所有的點標記

需要注意的是 鬆弛的時候判斷鬆弛邊的起點有沒有被標記 如果它被標記過 說明 它能鬆弛的那個點一定也被標記過了 那麼就跳過這個邊就可以了

#include#include#include#include#include#includeusing namespace std;

int a[205];

int n,m,q;

struct node

;int l(int x)

node b[40050];

int point[205];

int cnt;

void add(int u,int v,int w)

bool vis[205];

int dis[205];

int c[205];

bool f[205];

void dfs(int u)

}}void spfa()

else}}

}}

}int main()

scanf("%d",&m);

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

scanf("%d",&q);

spfa();

printf("case %d:\n",tt);

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

}}

SPFA判斷負環

說明一下,這個例題用下面的方法是過不了的,只能過掉25分因為資料加強了,而我不會寫bfs版spfa判負環 但是我覺得會dfs版的就行了,反正對於隨機資料dfs版的絕對吊打bfs版的 只不過這道題的資料不是隨機的,是有人惡意新增的 我們利用dfs強行進行鬆弛操作 我感覺已經不能叫他spfa了 如果在一...

關於spfa 判斷負環

判斷給定的有向圖中是否存在負環。利用spfa 演算法判斷負環有兩種方法 1 spfa 的dfs 形式,判斷條件是存在一點在一條路徑上出現多次。2 spfa 的bfs 形式,判斷條件是存在一點入隊次數大於總頂點數。如下 法 1 spfa 的dfs 形式 include include include ...

蟲洞(SPFA判斷負圈)

問題描述 約翰在他的農場中閒逛時發現了許多蟲洞。蟲洞可以看著一條十分奇特的有向邊,並可以使你返回到過去的時刻 相對你進入蟲洞之前 約翰的每個農場有m條無向小路連線著n塊地,並有w個蟲洞。現在約翰想借助這些蟲洞回到過去 出發時刻之前並且位置處於起點處 請你告訴他能辦到嗎?約翰向你提供了t個農場的地圖。...