網絡流 (網絡流問題匯總)


基本概念:

網絡:(1)有一個源點 s 和匯點 t 。

           (2)每一條有向邊e=(u,v)都有一個容量限制記做c(e)。

:定義在網絡弧集上的實值函數 f ,滿足三個性質

           (1)對任意的弧 0 <= f <= c(e),容量限制。

           (2)f(u,v) == -f(v,u),反對稱性。

           (3)流守恆性:除源匯點外,其余頂點都是過度點,流進頂點的流總和等於流出頂點的流總和。

殘余網絡:用e表示網絡中的邊,e' 表示殘余網絡中的邊,殘余網絡中的邊由以下兩種構成:

           (1)若f(e) < c(e) ,e=(u,v),則e' =(u,v)容量為 c(e) - f(e)

           (2)若f(e)>0,e=(u,v),則加入邊 e'=(v,u),容量為 f(e)

             其中有(1)生成的邊表示沿着這條邊還能推進多少流;由(2)生成的邊表示沿着該邊的逆方向能退回多少流。

增廣路: 定義增廣路 P 是在殘余網絡上的一條從源點 s 到匯點 t 的簡單路徑,路徑的殘余流量為該邊上的邊 e' 容量的最小值,其實就是殘余網絡上增廣的流值大於 0 的一條路徑。

 

割的定義:設網絡G,如果 X 是 V 的頂點子集,Y 是 X 的補集,即 Y = V - X,且滿足 源點 屬於X,匯點 屬於 Y。則稱K=(X,Y)為網絡 G 的割,K的容量記為 cap(K) 最小割就是該網絡中流量最小的割。

最小割最大流定理

指在一個網絡流中,能夠從源點到達匯點的最大流量  等於  如果從網絡中移除就能夠導致網絡流中斷的邊的集合的最小容量和。即在任何網絡中,最大流的值等於最小割的容量

完整描述:下面給出的三個定理是等價的

(1)f 是 G 的最大流 (2)殘余網絡不包含增廣路徑  (3)對於圖的某個割K=(X,Y),最大流=cap(K)

最大流問題: 在不超過個邊容量限制的情況下,求源點到匯點的最大流量

Ford-Fulkson算法思想:

(1)初始化網絡中所有邊的容量,c(u,v)表示邊的容量,c(v , u)=0 邊(v,u)為回退邊

(2)在殘量網絡中找一條從源點到匯點的增廣路P,找到進行(3)否則進行(5)

(3)在增廣路中找到路徑中容量最小的邊 X,累加到最大流中。

(4)將增廣路中所有的c(u,v)減去 X ,所有的c(v,u)加上X,構成新的殘余網絡,轉步驟(2)

(5)得到最大流,退出

《算法導論》中將Ford-Fulkson歸結為一種方法而非算法,也許正是因為(2)中為給出尋找增廣路的具體方法。

而能否高效的尋找到增廣路是判斷各算法優劣的主要依據。

根據劉汝佳大大在書中的建議:理解Ford-Fulkson算法的原理,比賽中使用Dinic或者ISAP(當做黑盒算法)

dinic模板鏈接:模板

最大費用最小流:每條邊除了有一個容量限制外,還有所需要的費用。而要達到的是總流量最大的前提下,總費用最小的流。

MCMF模板鏈接:模板 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM