費用流演算法 ZKW

2021-05-23 10:39:05 字數 542 閱讀 8237

連續研究了幾天的費用流,乙個屬於自己版本的zkw費用流出爐了。

zkw神牛發明的zkw演算法可以說是編寫簡單,速度也非常不錯。

個人還給zkw加了乙個當前弧優化,km演算法中的鬆弛變數優化與連續增廣優化,不過加了這些優化後zkw的全部過程也只有30行。

感覺上zkw就是優化了spfa求最短路的過程,因為spfa沒有充分利用上次求出來的結果最短路的結果,

zkw相當於迪傑斯特拉每次加入一條介於訪問過的點和沒有訪問過的點之間一條改進量最小的邊,所謂的改進量就是g[k]=dis[i]-dis[j]+w[k];

關於一開始就有負權的邊,zkw牛本人說先求一次可行流再求一次最小費用流,這個我沒看懂。。大量隨機資料證明,只有正權的費用流用zkw是不會錯的,那麼根據題目的性質給負權的邊加上乙個極大值就可以了。

不知道為什麼(難道是我隨出來的資料太水了),zkw在各種圖上有無法超越的優勢,隨機稠密圖比spfa快10倍左右,300個點50000條邊大約1.5s比spfa快8倍左右,10000個點100000條邊12s左右,spfa一分鐘沒跑出來不想等了。

經典費用流napkin:

網路流 費用流zkw演算法

進行spfa每次對殘餘網路求最短路,記錄前驅,然後跑這條增廣路,更新答案,直到源點和匯點不連通位置 我們可以類似dinic,在spfa求完每個點到源點的距離之後,再像dinic一樣進行增廣,這樣就能多路增廣,並且還可以加當前弧優化。include using namespace std const ...

最小費用流模板(zkw與spfa)

實踐中,上面的這個演算法非常奇怪.在某一些圖上,演算法速度非常快,另一些圖上卻比純 spfa 增廣的演算法慢.不少同學經過實測總結的結果是稠密圖上比較快,稀疏圖上比較慢,但也不盡然.這裡我從理論上分析一下,究竟這個演算法用於哪些圖可以得到理想的效果.先分析演算法的增廣流程.和 spfa 直接演算法相...

餐巾計畫問題 網路流24題 費用流 zkw

乙個餐廳在相繼的 nn 天裡,每天需用的餐巾數不盡相同。假設第 ii 天需要 r iri 塊餐巾 i 1,2,n 餐廳可以購買新的餐巾,每塊餐巾的費用為 pp 分 或者把舊餐巾送到快洗部,洗一塊需 m 天,其費用為 f 分 或者送到慢洗部,洗一塊需 nn 天 n mn m 其費用為 ss 分 ss ...