會了spfa這么長時間竟然不會判斷負環,今天剛回。。
【例題】poj3259
題目大意:當農場主 John 在開墾他的農場時,他發現了許多奇怪的昆蟲洞。這些昆蟲洞是單向的,並且可以把你從入口送到出口,並且使得時間倒退一段時間。 John 的每個農場包含 N(1≤N≤500)塊地,編號從 1~N,這 N 塊地之間有 M(1≤M≤2500)條路、 W(1≤W≤200)個昆蟲洞。因為 John 是一個狂熱的時間旅行迷,他想嘗試着做這樣一件事:從某塊地出發,通過一些路徑和昆蟲洞,返回到出發點,並且時間早於出發時間,這樣或許他可以遇到他自己。你的任務是幫助 John 判斷是否可行。他將提供他的 F(1≤F≤5)個農場的完整地圖。每條路走完所需時間不超過 10,000 秒,每個昆蟲洞倒退的時間也不超過 10,000 秒。
【解】
想一下就會發現,這道題其實就是判斷圖中的負環。這個功能spfa就能實現。首先如果spfa中一個點進隊超過n次,那就說明圖中存在負環,至於為什么是進隊n次而不是被更新n次,可以假設一個有兩個節點的圖。。從1-2有10條重邊。。邊權分別從10到1。。然后完全有可能遍歷的時候從邊權為10的邊開始更新10次。。但是可以不存在負權回路。。