--- tags: 圖論 title: 網路流初步 --- :::info - #### 題敘很臭很長的模板題 [TIOJ 2117](https://tioj.ck.tp.edu.tw/problems/2117) ::: :::success # 網路流 Flow ![](https://i.imgur.com/1G7oC4r.png) ## 名詞解釋 - Source(s):源點 - Sink(t):匯點 - Capacity\(c\):容量 - Flow(f):流量 - Node:節點 - Arc:弧(邊) - Cost:費用 ## 定義 - 在每條邊都有容量的有向圖分配流 - 有且僅有一個源點,入度為0;有且僅有一個匯點,出度為0 ## 性質 - 容量限制:$f(u, v) \le c(u, v)$ - 斜對稱性:$f(u, v)=-f(v, u)$ - 流量守恆:$\sum_{(u, v)\in E}f(u, v)=0$ ::: :::success # 最大流問題 ![](https://i.imgur.com/97Iy0LF.jpg) *(數字表capacity)* ## 定義 - 求S到T的最大流量$MAX(|f|=\sum_{(s, v)\in E}f(s, v)=\sum_{(u, t)\in E}f(u, t))$ ## Edmonds-Karp演算法 ### 殘量網路 ![](https://i.imgur.com/No0KNQ9.png) - 計算每條弧上容量與流量差,形成殘量網路 - $c'(u, v)=c(u, v)-f(u, v)+f(v, u)$ - 殘量網路邊數最多可以達到原圖的兩倍 ### 增廣路徑 - 殘量網路中由S通向T的有向道路 - 求出路徑中所有殘量的最小值$min(c'(u, v))=d$ - 將路徑中所有弧的流量增加$d$ - 重複直到殘量網路中不存在增廣路徑 ## 實作 1. 建立殘量網路 2. 用BFS尋找增廣路徑 3. 增加每條增廣路徑的流量 4. 重複直到不存在增廣路徑 ::: :::success # 最大流最小費用問題 ## 定義 - 給予每條弧單位流量所需的費用$c$ - 在流量最大化$|f|=MAX(\sum_{(s, v)\in E}f(s,v )=\sum_{(u, t)\in E}f(u, t))$的前提下最小化總費用 ## 實作 - 網路流圖最大流量為一定值,無論如何增大流量,最後都會達到唯一最大流量 - Greedy想法:每次在DFS同時記錄增廣路徑單位流量所需的總費用,選擇目前費用最小的增廣路徑增加流量,直到達到最大流量,則此時累計費用即為最大流量最小費用 ::: :::success # 最大流最小割 ## 定義 ## 證明 :::