最小割
<1>什么是割?
引例:你的仇人是一個工廠老板.你要炸掉一些車,讓他每個貨物都運不到銷售點.
炸掉越大的車,你越容易被發現.你希望炸掉的車的容量之和盡量小.
最小化這個值.
定義:選出一些邊的集合,使得刪除它們之后從源點無法到達匯點,那么這個集合就叫做一個割.
這些邊的容量之和稱作這個割的容量.
<2>最小割最大流定理
定理1:任取一個割,其容量大於最大流的流量.
證明:
從源點到匯點的每條路徑都會經過割上的至少一條邊.
割掉這些邊之后,把源點能到達的點放到左邊,不能到達的放到右邊.
顯然源點到匯點的流量不會超過從左邊走向右邊的次數,而這又不會超過從左邊到右邊的邊的容量之和.
直觀一點,假設你是在車裝着貨物的時候炸掉了它.
每個貨物你至少付出1的代價炸掉(流量小於容量的時候你要付出比貨物數更多的代價),所以你炸的代價不會小於貨物數.
定理2:最小割的容量等於最大流的流量,且FF方法能夠正確的求出它.
這意味着一個驚人的事實:你能夠僅付出和貨物數相同的代價,就把你的仇人的財路炸斷.
證明:
考慮FF算法結束時,殘量網絡上沒有了增廣路.
那么我們假設這時候,從源點經過殘量網絡能到達的點組成的集合為X,
不能到達的點為Y.顯然匯點在Y里,並且殘量網絡上沒有從X到Y的邊.
可以發現以下事實成立:
(1)Y到X的邊流量為0.如果流量不為0那么應該存在一條從X到Y的反向邊,於是矛盾.
(2)X到Y的邊流量等於其容量.只有這樣它才不會在殘量網絡中出現.
根據第一個條件,我們可以得知:沒有流量從X到Y之后又回到了X.
所以當前流量應該等於從X到Y的邊的流量之和,而根據第二個條件它又等於從X到Y的邊容量之和.
而所有從X到Y的邊又構成一個割,其容量等於這些邊的容量之和.
這意味着我們找到一個流和一個割,使得前者的流量等於后者的容量.
而根據前面的結論,最大流的流量不會超過這個割的容量,所以這個流一定是最大流.
同樣的,最小割的容量也不會小於這個流的流量,所以這個割也一定是最小割.
這就是FF法最后的局面(由於FF會終止,所以它必定求出這樣一個局面),由此我們得出結論:FF是正確的,並且最大流等於最小割
