題意是給出乙個有向圖 給出一定的邊 可以求出邊權 求單源最短路 如果<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個農場的地圖。...