SPFA小總結
阿新 • • 發佈:2017-09-11
沒有 gen 插入 稀疏圖 最大流 center 考試題 堆優化 由於
關於spfa
知識點
原始版 ---裸
應用:
一、判負環
兩種方法
1.跑單源點,如果某一個點入隊了n-1次,存在
2.對於每個點spfa,如果此源點反被其他點更新,存在
證明:點i作為源點,d[i]==0 若i被更新,d[i]<0 定存在負環
二、網絡流最小費用最大流
無限spfa直到沒有可流的量
在原始spfa中,加入流量限制 ,記錄入邊
每次spfa結束後沿入邊更新流量即可
三、差分約束
建圖更復雜,建好圖就很水了
優化:
SLF
雙向隊列優化 若d[v]<d[head] 插入隊首 否則隊尾
堆優化:手寫小頂堆或者STL優先隊列
優點
跑稀疏圖較快且可以跑負邊權
復雜度 O(E*K) K為常數且大致為1~2
題目分析:
Spfa其實很簡單啊,只是建模比較麻煩了
1.首先今上午的考試題,spfa中加一個dp,存到現在點用了幾個血包,但由於惡心的出題人卡了你一下,你需要一個SLF優化或者轉成dijkstra
知識點:dp+優化
2.某個題目吧,大致是一個n*m的方格圖,只能沿著邊走,問從一個坐標到另一個坐標最少需要轉幾次彎。 拆點,每個格點拆為上下左右四個點,表示向哪個方向走,想到拆點之後建邊就很簡單了
知識點:拆點
3.一道很裸的判負環的題,方法上面又講,代碼也很簡單
知識點:判負環
4.分層spfa,有一些層次,每個層次只能向下一層次建邊
知識點:建模
大概見過的題目好像就只有這些了。。。
考得多的其實是拆點和建邊吧
(完)
SPFA小總結