流網路(
flow networks
):指的是乙個有向圖
g = (v, e)
,其中每條邊
(u, v) ∈e
均有一非負容量
c(u, v) ≥ 0
。如果(u, v) ∉e
則可以規定
c(u, v) = 0
。流網路中有兩個特殊的頂點:源點s (
source
)和匯點t(
sink
)。為方便起見,假定每個頂點均處於從源點到匯點的某條路徑上,就是說,對每個頂點v ∈
e,存在一條路徑
s --> v --> t。
容量限制:對於所有的結點
u, v ∈v
,要求0 ≤ f(u, v) ≤ c(u, v)。(通俗的理解就是最大量)
流量限制:對於所有的結點u ∈
v -
,要求 σf(v, u) = σf(u, v)。(通俗的理解就是實際可行量,流量可通過一輪一輪的判斷,加,得到最大流)
殘留網路:
容量網路
- 流量
網路=
殘留網路
增廣路徑(augmenting path):
這是一條不超過各邊容量的從s 到
t 的簡單路徑,向這個路徑注入流量,可以增加整個網路的流量。我們稱在一條增廣路徑上能夠為每條邊增加的流量的最大值為路徑的殘餘容量,
cf(p) = min
(所有中最小的乙個,與取交集或大家都可以承受的量 思想類似)
可行量:
可行流f為最大流:即不存在關於f的增廣路徑。
如果存在增廣路徑,則通過bfs或des找出一條增廣路徑,然後根據該條增廣路徑進行流量更新,新增流量。
增廣路徑求解最大流
關於什麼是最大流。我說不清楚,而且也沒有別人的比喻生動。主要是我懶,不想畫圖 演算法的核心在於 找到增廣路徑,修改它,繼續找,直到沒有。while findaugmentpath 判斷是否有增廣路 maxflow maxflow delta 最大流增加 modifygraph 對增廣路進行修改 en...
棋盤覆蓋 最大流求解最大匹配
乙個二分圖最大匹配的問題,依然是分成兩部分,數字座標和為奇數的為一部分,和為偶數的為另一部分。這兩部分各自內部沒有連線,可以作為二分圖。二分圖最大匹配可以用最大流解決。可以引進乙個源點s ss,從s ss出發向二分圖的左部分連線 有向邊 把從左部分連向右部分的雙向邊換成從左連向右邊的單向邊,然後從二...
最大流問題
暫時最大流問題我就先掌握這一種演算法吧 基本的最大流問題 ek演算法 基於bfs 每一次bfs更新一條路徑,雖然都會入佇列,但是由於以下條件保證點不會交叉,所以只有一條到終點的路徑會更新流量。if res v map u v flow u v 注意更新flow矩陣的時候是這樣的 while u st...