WARush

SRMの結果とか、解けた問題のコードを書いていきます

蟻本P191 最大流 - 最小カット定理

蟻本に載ってることそのまま書くだけ
蟻本の最大流で使われたグラフをそのままサンプルで使います。
↓↓
f:id:Ekaing:20130427130334j:plain


グラフのカットとは、ある頂点集合Sに対して、Sから出ていく辺の集合の事をいい、
カット(S V/S)のように表します。また、その辺の容量の和をカットの容量といいます。

f:id:Ekaing:20130427124707j:plain

さらに、Sの中にsを、V/Sの中にtを含むようにカットすることを、
s-tカットといいます。

f:id:Ekaing:20130427124800j:plain

最小カット問題とは・・・
ネットワークにに対して、sからtへのパスが存在しなくなるために(つまりs-tカットで)
除去しなければいけない辺の容量の和の最小値はどれだけか
という問題である。
フロー流量とカット容量の関係
まず、任意のs-tフロー f と任意のs-tカット(S, V/S)を考えてみましょう。

↓こんなフローとカット↓
f:id:Ekaing:20130427124829j:plain

sについては( fの流量 ) = ( sから出る辺の流量 )であり、
それ以外のSの頂点vについては( vから出る辺の流量 = vに入る辺の流量 )であるので、

f:id:Ekaing:20130427124854j:plain

( fの流量 ) = ( Sから出る辺の流量 ) - ( Sに入る辺の流量 ) となります。


ここで、辺に流す量は、どう頑張っても容量を超えることはできません。
カットの容量は、Sから出て行く辺の容量の和となりますので、

( fの流量 ) <= ( カットの容量 )となる事がわかります。

f:id:Ekaing:20130427125059j:plain

Ford-Fulkersonのアルゴリズムの正当性
次に、Ford-Fulkersonのアルゴリズムによって得られたフローFを考えて見ましょう

f:id:Ekaing:20130427125405j:plain

フローFに対する残余グラフにおいて

f:id:Ekaing:20130427125426j:plain

s-vパスの存在するような頂点vからなる集合をSとすると、

f:id:Ekaing:20130427125440j:plain

Fの残余グラフにおいて、s-tパスが存在しない事により(Sに頂点tは含まれないので)、
(S, V/S)はs-tカットとなります。

f:id:Ekaing:20130427130024j:plain

また、Sの定義により、カットに含まれる辺e(Sから出て行く辺)について、
F(e) = c(e) (容量いっぱいいっぱい)となっており、
V/S から S に向かう辺e(Sに入ってくる辺)について、
F(e) = 0 となっています。

f:id:Ekaing:20130427125507j:plain

したがって、
( Fの流量 ) = ( Sから出る辺の流量 ) - ( Sに入る辺の流量 ) = ( カットの容量 ) 
となり、
先ほどの不等号( fの流量 <= カットの容量 )から、Fが最大流であることが分かります。


Ford-Fulkersonのアルゴリズムを使うと、
( Fの流量 ) = ( カットの容量 )となるs-tカットが必ずできるため、
( fの流量 ) <= ( カットの容量 )より、
このs-tカットが最小カットであることも分かります。