網路流 最大流 最小費 回顧

2021-06-08 07:19:04 字數 1028 閱讀 5588

1/最大流

容量網路作為問題的有向圖. 要有反向弧用於回流, 且反向弧容量為0.

殘量網路, 殘量=容量-當前流.(容量/當前流/殘量都有反向弧) 殘量》0,代表可達, 所以要不斷在殘量網路中找 s 到 t 的可達路. 稱為增廣路.

什麼叫增廣路? 就是當你把這條路加進來後, 會使你的結果更優. (在最大匹配中交錯軌就是它的增廣路).

找到增廣路怎麼更新當前流?

我們只需要維護乙個 d[v] 值, 表示此次增廣, 在殘量網路上, s->v上的最小殘量. 什麼意思? 就是所組成的邊的各個邊權的最小值.

找到增廣路後, 我們用 d[t] (t表示匯點), 來更新增廣路上各邊的流量(包括反向弧的), 然後把d[t]加進當前當前流結果即可.

當找不到增廣路了, 當前流為最大流.

我們可以用bfs來找增廣路. 這種最大流演算法稱為ek演算法(也叫sap演算法).

總結: 求最大流, 在於不斷在殘量網路上找各邊殘量》0的增廣路, 用bfs來遍歷殘量網路, 維護d[v], 直到遍歷到t.

2/最小費

容量網路各邊增加乙個費用權值(單位流量所需費用, 可以為負值).

要找出在最小費的前提下的最大流.

相較普通最大流, 我們不能再用bfs隨意地遍歷圖了, 我們要優先選費用小的可行流.

所以, 費用相當於殘量網路的邊權, 找增廣路的過程變為在殘量網路上找最短路. 殘量網路中邊的可達條件仍然是 殘量》0.

在找到增廣路(最短路)後, 我們再掃一遍這條路來計算各邊最小殘量, 為總流可改進量(等同於最大流裡說的d[t]).

然後用最小殘量來更新增廣路上各邊流量, 並把最小殘量加進當前流結果.

同時更新最小費, 最小費 += 最小殘量*最短路長.

總結: 跟普通最大流的區別就是遍歷圖時不能直接bfs, 而是找最短路(費用為權).

網路流 最小費用最大流

q 為什麼突然想搞網路流?a 迫於tham 蛤mu的淫威 用最短路演算法求出s t的路徑 把路徑要摳出來,而且每條邊要有容量 算一下路徑裡面的可以流過的最大的流量 發現此時的花費就是 dis t flow 累加即可.重複1 3直到不能夠到達t.include include include incl...

網路流 最大流 最小割 最小費用流

sap gap 鄰接表 sap gap 鄰接矩陣 dinic 鄰接矩陣 dinic 鄰接表 介個人寫的敲詳細 include include include include include using namespace std const int maxn 5010 const int maxn ...

網路最大流和最小費用流

from 網路最大流和最小費用流.html 網路流isap演算法的簡單介紹 from 這幾天由於種種原因經常接觸到網路流的題目,這一型別的題給人的感覺,就是要非常使勁的yy才能出來點比較正常的模型。尤其是看了amber最小割應用的文章,裡面的題目思路真是充滿了綿綿不絕的yd思想。然而比賽中,當你yd...