網路流 (網路流問題彙總)

2021-08-23 12:09:27 字數 1451 閱讀 2729

網路:(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(當做黑盒演算法)

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

網路流 網路流24題 騎士共存問題

洛谷p3355 題目 n n方格中最多放多少馬 無撇馬腳,走 日 字 互不相殺。還有部分障礙不能放馬 題解 同樣考慮,假如全部 非障礙 放滿,刪去最少的點,使圖無限制。染色後,同方格取數,連邊後跑最小割 分界線 思考為什麼這樣染色後建圖就可以。因為白點一定限制的是黑點,黑點一定限制的是白點,說明兩個...

費用流 網路流模版

費用流模版 include include includeusing namespace std const int maxm 100000 最大邊數 const int maxn 1000 最大點數 struct edge edge int a,int b,int c,int d,int e in...

網路流 網路流基礎 最大流

學了坤m就對網路流有點感覺了 使網路的流量最大 應用很多,如可以求二分圖的最大匹配 左部左邊來個源點,右部右邊來個匯點 邊權設為1 11最大匹配數就等於網路的最大流量 bfs調整每條邊的流量 很像坤m 增廣路 源點到匯點中剩餘容量為正的一條路徑 找到這條路徑,調整流量 那麼ek演算法的輪廓就出來了 ...