§E16.12最大フロー最小カット定理

最終更新

各弧に通過量の上限が定まった有限の有向ネットワークにおいて、湧点から吸点へ送ることのできる量の最大値を問う。送る量には二種類の制約がかかる。一つは弧ごとの容量制約であり、もう一つは湧点と吸点以外の頂点における保存則である。他方で、湧点側と吸点側を分ける頂点集合の切り分けを一つ固定すると、その切り分けを越える弧の容量の総和は、送ることのできる量の上限である。本記事では、この二つの量、すなわち最大のフローの値と最小のカットの容量が、非負実容量のもとで必ず一致することを証明する。

証明は三段からなる。第一に、フロー全体が有限次元 Euclid 空間の空でない有界閉集合であり、フローの値がその上の連続関数であることを示して、最大フローの存在を保証する。第二に、フローから残余ネットワークを作り、そこに湧点から吸点への有向道が存在するならばフローの値を増やすことができることを示す。第三に、残余ネットワークに湧点から吸点への有向道が存在しないとき、残余ネットワークで湧点から到達可能な頂点全体の集合がカットであり、そのカットの容量がちょうどフローの値に等しいことを示す。最後に、容量がすべて非負整数である場合について、増加を繰り返す手続きが有限回で停止することと、整数値をとる最大フローが存在することを導く。

本記事を通じて、グラフの基本的な語彙(頂点、辺、次数)は§D2.7 定義 1.1に従い、有向グラフ、有向道および到達可能性は§D2.11 定義 1.1に従う。ただし§D2.11 定義 1.1では有向グラフの要素を「辺」とよぶのに対し、本記事では向きと容量をもつ要素を弧とよび、集合をAAと書く。無向グラフの辺と区別するためである。有向グラフD=(V,A)D=(V,A)の弧集合AAは、相異なる二頂点の順序対からなる集合である。逆平行な弧の対(u,v)(u,v)と(v,u)(v,u)がともにAAに属することを許し、自己ループは考えない。頂点vvについて、vvを始点とする弧の集合をδ+(v)\delta^{+}(v)、vvを終点とする弧の集合をδ−(v)\delta^{-}(v)と書く。頂点集合S⊆VS\subseteq Vについて、始点がSSに属し終点がSSに属さない弧の集合をδ+(S)\delta^{+}(S)、終点がSSに属し始点がSSに属さない弧の集合をδ−(S)\delta^{-}(S)と書く。

1 ネットワークとフロー

定義 1.1. 有限有向グラフD=(V,A)D=(V,A)、相異なる二頂点s,t∈Vs,t\in V、および容量とよぶ写像c:A→[0,∞)c:A\to[0,\infty)の組(D,c,s,t)(D,c,s,t)をネットワーク (flow network) という。ssを湧点 (source)、ttを吸点 (sink) という。

写像f:A→Rf:A\to\Rがフロー (flow) であるとは、次の二条件を満たすことをいう。

  1. (容量制約)各a∈Aa\in Aについて0≤f(a)≤c(a)0\le f(a)\le c(a)が成り立つ。
  2. (保存則)各v∈V∖{s,t}v\in V\setminus\{s,t\}について ∑a∈δ−(v)f(a)=∑a∈δ+(v)f(a)\sum_{a\in\delta^{-}(v)}f(a)=\sum_{a\in\delta^{+}(v)}f(a) が成り立つ。

フローffの値 (value of a flow) を

val⁡(f)=∑a∈δ+(s)f(a)−∑a∈δ−(s)f(a)\operatorname{val}(f)=\sum_{a\in\delta^{+}(s)}f(a)-\sum_{a\in\delta^{-}(s)}f(a)

と定める。値が最大であるフロー、すなわち任意のフローf′f'についてval⁡(f′)≤val⁡(f)\operatorname{val}(f')\le\operatorname{val}(f)を満たすフローffを最大フロー (maximum flow) という。

フローが少なくとも一つ存在するかどうかは、この定義だけからは明らかでない。各弧で値00をとる写像がフローであることは命題 3.2の証明で確かめる。以下では、RA\R^{A}をすべての写像A→RA\to\Rのなす∣A∣\lvert A\rvert次元の実ベクトル空間とみなし、フロー全体の集合を

F={f∈RA: f はフローである}F=\{f\in\R^{A}:\ f\ \text{はフローである}\}

と書く。

2 カットとフローの値の上界

定義 2.1.s∈Ss\in Sかつt∈V∖St\in V\setminus Sを満たす頂点集合S⊆VS\subseteq Vを ss-ttカット (s-t cut) という。ss-ttカットSSの容量 (capacity) を

c(S)=∑a∈δ+(S)c(a)c(S)=\sum_{a\in\delta^{+}(S)}c(a)

と定める。容量が最小であるss-ttカットを最小カット (minimum cut) という。

ss-ttカットは湧点側と吸点側を分ける切り分けであり、その容量は切り分けを順方向に越えることのできる量の総和である。この見方を、次の命題で等式と不等式の形に確定する。等式の側は後の議論でも繰り返し用いる。

命題 2.2. 任意のフローffと任意のss-ttカットSSに対し

val⁡(f)=∑a∈δ+(S)f(a)−∑a∈δ−(S)f(a)\operatorname{val}(f)=\sum_{a\in\delta^{+}(S)}f(a)-\sum_{a\in\delta^{-}(S)}f(a)

が成り立つ。とくにval⁡(f)≤c(S)\operatorname{val}(f)\le c(S)が成り立つ。

証明. 各頂点v∈Vv\in Vに対し

b(v)=∑a∈δ+(v)f(a)−∑a∈δ−(v)f(a)b(v)=\sum_{a\in\delta^{+}(v)}f(a)-\sum_{a\in\delta^{-}(v)}f(a)

と置く。保存則によりv∈V∖{s,t}v\in V\setminus\{s,t\}ではb(v)=0b(v)=0であり、値の定義によりb(s)=val⁡(f)b(s)=\operatorname{val}(f)である。SSはssを含みttを含まないので、SSの要素はssか、または保存則の成り立つ頂点である。したがって

∑v∈Sb(v)=b(s)=val⁡(f)\sum_{v\in S}b(v)=b(s)=\operatorname{val}(f)

が成り立つ。

左辺を弧ごとに数え直す。自己ループが無いので、弧a=(u,v)a=(u,v)の始点と終点は相異なる。aaが∑v∈Sb(v)\sum_{v\in S}b(v)へ寄与する仕方は次の四通りである。u∈Su\in Sかつv∈Sv\in Sのとき、b(u)b(u)に+f(a)+f(a)、b(v)b(v)に−f(a)-f(a)として現れて相殺する。u∈Su\in Sかつv∉Sv\notin Sのとき、すなわちa∈δ+(S)a\in\delta^{+}(S)のとき、b(u)b(u)に+f(a)+f(a)としてだけ現れる。u∉Su\notin Sかつv∈Sv\in Sのとき、すなわちa∈δ−(S)a\in\delta^{-}(S)のとき、b(v)b(v)に−f(a)-f(a)としてだけ現れる。u∉Su\notin Sかつv∉Sv\notin Sのとき、寄与は無い。したがって

∑v∈Sb(v)=∑a∈δ+(S)f(a)−∑a∈δ−(S)f(a)\sum_{v\in S}b(v)=\sum_{a\in\delta^{+}(S)}f(a)-\sum_{a\in\delta^{-}(S)}f(a)

となり、主張の等式を得る。

不等式を示す。容量制約によりf(a)≥0f(a)\ge0であるから、右辺の第二の和は非負であり、これを落とすと上からの評価になる。さらに各a∈δ+(S)a\in\delta^{+}(S)でf(a)≤c(a)f(a)\le c(a)であるから

val⁡(f)≤∑a∈δ+(S)f(a)≤∑a∈δ+(S)c(a)=c(S)\operatorname{val}(f)\le\sum_{a\in\delta^{+}(S)}f(a)\le\sum_{a\in\delta^{+}(S)}c(a)=c(S)

が成り立つ。▨

この命題により、フローの値とカットの容量が一致する対を見つけることには意味がある。そのような対が見つかれば、両者の最適性を他の候補と比べることなく確定することができるからである。この見通しは定理 5.1 (3)⇒\Rightarrow(1)の段で証明の形にする。最大フロー最小カット定理では、値と容量の一致が必ず起こることが主張される。

3 最大フローの存在

容量が非負の実数であるとき、フローの値がとりうる値の集合は上に有界な実数の集合であるから上限をもつ。しかし上限が実際に達成されること、すなわち最大フローが存在することは、この段階では分かっていない。そこで、フロー全体の集合がコンパクトであることと、フローの値が連続であることを示して最大値の存在を得る。

コンパクト性を用いるためには、まずフローの値が連続であることを確かめる必要がある。有限次元空間上の線形汎関数の連続性は先行する記事で扱っていないので、ここで示す。

補題 3.1.AAを有限集合とし、α∈RA\alpha\in\R^{A}を固定する。RA\R^{A}に Euclid 距離ρ2\rho_2を入れ、

L(x)=∑a∈Aα(a) x(a)L(x)=\sum_{a\in A}\alpha(a)\,x(a)

によってL:RA→RL:\R^{A}\to\Rを定める。このときLLは§E2.4 定義 1.1の意味で連続である。

証明.K=1+∑a∈A∣α(a)∣K=1+\sum_{a\in A}\lvert\alpha(a)\rvertと置く。K≥1>0K\ge1>0である。x,y∈RAx,y\in\R^{A}に対し、各a∈Aa\in Aについて

∣x(a)−y(a)∣≤(∑b∈A(x(b)−y(b))2)1/2=ρ2(x,y)\lvert x(a)-y(a)\rvert\le\Bigl(\sum_{b\in A}(x(b)-y(b))^{2}\Bigr)^{1/2}=\rho_2(x,y)

が成り立つ。三角不等式により

∣L(x)−L(y)∣=∣∑a∈Aα(a)(x(a)−y(a))∣≤∑a∈A∣α(a)∣ ∣x(a)−y(a)∣≤Kρ2(x,y)\lvert L(x)-L(y)\rvert=\Bigl\lvert\sum_{a\in A}\alpha(a)(x(a)-y(a))\Bigr\rvert \le\sum_{a\in A}\lvert\alpha(a)\rvert\,\lvert x(a)-y(a)\rvert \le K\rho_2(x,y)

を得る。ε>0\varepsilon>0に対してδ=ε/K>0\delta=\varepsilon/K>0と置けば、ρ2(x,y)<δ\rho_2(x,y)<\deltaのとき∣L(x)−L(y)∣<ε\lvert L(x)-L(y)\rvert<\varepsilonが成り立つ。したがってLLは各点で連続である。▨

命題 3.2. ネットワーク(D,c,s,t)(D,c,s,t)に対し、フロー全体の集合F⊆RAF\subseteq\R^{A}は空でない有界閉集合であり、val⁡:F→R\operatorname{val}:F\to\Rは連続である。従属選択公理を仮定すると、val⁡\operatorname{val}はFFの上で最大値をとる。すなわち最大フローが存在する。

証明.A=∅A=\emptysetのときはRA\R^{A}が一点集合であり、FFはその一点からなり、val⁡\operatorname{val}は00という値だけをとるので主張は成り立つ。以下A≠∅A\ne\emptysetとし、n=∣A∣≥1n=\lvert A\rvert\ge1と置く。

空でないこと。各弧で値00をとる写像はフローであるからF≠∅F\ne\emptysetである。

有界であること。C=max⁡a∈Ac(a)C=\max_{a\in A}c(a)と置く。f∈Ff\in Fならば各aaで0≤f(a)≤C0\le f(a)\le Cであるから

ρ2(f,0)=(∑a∈Af(a)2)1/2≤n C\rho_2(f,0)=\Bigl(\sum_{a\in A}f(a)^{2}\Bigr)^{1/2}\le\sqrt{n}\,C

が成り立つ。したがってFFは原点を中心とする半径n C+1\sqrt n\,C+1の開球に含まれ、有界である。

閉であること。各a∈Aa\in AについてΦa(x)=x(a)\Phi_a(x)=x(a)と置き、各v∈V∖{s,t}v\in V\setminus\{s,t\}について

Kv(x)=∑a∈δ−(v)x(a)−∑a∈δ+(v)x(a)K_v(x)=\sum_{a\in\delta^{-}(v)}x(a)-\sum_{a\in\delta^{+}(v)}x(a)

と置く。自己ループが無いのでδ−(v)\delta^{-}(v)とδ+(v)\delta^{+}(v)は交わらず、KvK_vは係数が11、−1-1または00である線形汎関数である。Φa\Phi_aも線形汎関数であるから、補題 3.1によりこれらはすべて連続である。

FFの補集合が開であることを示す。g∈RA∖Fg\in\R^{A}\setminus Fとすると、次の三つの場合のいずれかが起こる。

  • あるa0∈Aa_0\in AについてΦa0(g)<0\Phi_{a_0}(g)<0である。ε=−Φa0(g)>0\varepsilon=-\Phi_{a_0}(g)>0に対するΦa0\Phi_{a_0}の連続性のδ>0\delta>0をとると、ρ2(x,g)<δ\rho_2(x,g)<\deltaを満たすxxはΦa0(x)<Φa0(g)+ε=0\Phi_{a_0}(x)<\Phi_{a_0}(g)+\varepsilon=0を満たすので、x∉Fx\notin Fである。
  • あるa0∈Aa_0\in AについてΦa0(g)>c(a0)\Phi_{a_0}(g)>c(a_0)である。ε=Φa0(g)−c(a0)>0\varepsilon=\Phi_{a_0}(g)-c(a_0)>0に対するδ>0\delta>0をとると、ρ2(x,g)<δ\rho_2(x,g)<\deltaを満たすxxはΦa0(x)>Φa0(g)−ε=c(a0)\Phi_{a_0}(x)>\Phi_{a_0}(g)-\varepsilon=c(a_0)を満たすので、x∉Fx\notin Fである。
  • あるv0∈V∖{s,t}v_0\in V\setminus\{s,t\}についてKv0(g)≠0K_{v_0}(g)\ne0である。ε=∣Kv0(g)∣>0\varepsilon=\lvert K_{v_0}(g)\rvert>0に対するδ>0\delta>0をとると、ρ2(x,g)<δ\rho_2(x,g)<\deltaを満たすxxは∣Kv0(x)−Kv0(g)∣<ε\lvert K_{v_0}(x)-K_{v_0}(g)\rvert<\varepsilonを満たすのでKv0(x)≠0K_{v_0}(x)\ne0であり、x∉Fx\notin Fである。

いずれの場合もggの周りの開球がFFと交わらない。したがってFFの補集合は開であり、FFは閉である。

値の連続性。α(a)=1\alpha(a)=1(a∈δ+(s)a\in\delta^{+}(s)のとき)、α(a)=−1\alpha(a)=-1(a∈δ−(s)a\in\delta^{-}(s)のとき)、α(a)=0\alpha(a)=0(それ以外のとき)と定めると、自己ループが無いのでδ+(s)\delta^{+}(s)とδ−(s)\delta^{-}(s)は交わらず、α\alphaは矛盾なく定まる。このときval⁡(x)=∑aα(a)x(a)\operatorname{val}(x)=\sum_{a}\alpha(a)x(a)であるから、補題 3.1によりval⁡\operatorname{val}はRA\R^{A}上で連続である。連続性はε\varepsilonとδ\deltaによる条件であるから、定義域を部分集合FFへ制限したものも、FFにRA\R^{A}の距離を入れた部分空間の上で連続である。

結論。AAの要素に11からnnまで番号を付けると、RA\R^{A}は Euclid 距離を保ったままRn\R^{n}と同一視される。従属選択公理のもとで§E2.9 定理 4.3をRn\R^{n}の有界閉集合FFへ適用すると、FFはコンパクトである。ここで用いるコンパクト性も、次に用いる連続性も、距離から定まる位相についてのものである。実際、§E2.4 定義 1.1の意味での連続性は、§E2.4 定理 2.1により、開集合の逆像が開集合であることと同値であり、これが位相空間の写像としての連続性である。F≠∅F\ne\emptysetでありval⁡:F→R\operatorname{val}:F\to\Rは距離から定まる位相について連続であるから、§E2.19 定理 4.4によりval⁡\operatorname{val}はFFの上で最大値をとる。最大値を与えるf∈Ff\in Fが最大フローである。▨

4 残余ネットワークと増加道

フローが最大でないとき、どの方向へ量を動かせば値が増えるかを表すのが残余ネットワークである。弧aaの流量は、容量までの余裕c(a)−f(a)c(a)-f(a)の分だけ順方向へ増やすことができ、既に流れているf(a)f(a)の分だけ逆方向へ打ち消すことができる。この二種類の操作を、向きをもつ弧として一つのグラフにまとめる。

定義 4.1. ネットワーク(D,c,s,t)(D,c,s,t)とフローffに対し、残余ネットワーク (residual network)DfD_fを次のように定める。頂点集合はVVとする。各弧a=(u,v)∈Aa=(u,v)\in Aについて、

  1. c(a)−f(a)>0c(a)-f(a)>0であるとき、uuを始点としvvを終点とする順方向残余弧 (forward residual arc)a+a^{+}を置き、その残余容量 (residual capacity) をcf(a+)=c(a)−f(a)c_f(a^{+})=c(a)-f(a)と定める。
  2. f(a)>0f(a)>0であるとき、vvを始点としuuを終点とする逆方向残余弧 (backward residual arc)a−a^{-}を置き、その残余容量をcf(a−)=f(a)c_f(a^{-})=f(a)と定める。

残余弧は元の弧aaと向きの別によって区別する。すなわち残余弧は対(元の弧, 向き)で識別し、始点と終点が同じ二つの残余弧を同一視しない。したがってDfD_fは、始点と終点が同じ弧を複数もつことのある多重有向グラフであり、§D2.11 定義 1.1の有向グラフとは限らない。逆平行な弧の対(u,v)(u,v)、(v,u)(v,u)について両方向に残余がある場合に、実際にそのようなことが起こる。そこで、DfD_fにおける有向道と到達可能性を本記事で次のように定める。頂点がすべて相異なるように残余弧を順にたどってssからttへ至る列を増加道 (augmenting path) という。すなわち増加道とは、頂点の列s=w0,w1,…,wk=ts=w_0,w_1,\dots,w_k=t(w0,…,wkw_0,\dots,w_kは相異なる)と残余弧の列r1,…,rkr_1,\dots,r_kであって、各rir_iがwi−1w_{i-1}を始点、wiw_iを終点とするものである。同じ規約で、DfD_fにおいてssから到達可能 (reachable) な頂点を、ssから始まるこの形の列の終点として定める。増加道PPに対し

Δ(P)=min⁡{cf(r): r は P に現れる残余弧}\Delta(P)=\min\{c_f(r):\ r\ \text{は}\ P\ \text{に現れる残余弧}\}

をPPのボトルネック (bottleneck) という。残余弧の残余容量はいずれも正であるからΔ(P)>0\Delta(P)>0である。

この増加道は残余ネットワーク上の有向道であって、元のネットワークの有向道ではない。増加道では、弧に既に流れている量を打ち消すために、逆方向残余弧を用いることができる。この点が、単純に空きのある弧をたどるだけの操作との違いである。

補題 4.2. フローffと増加道PPをとり、Δ=Δ(P)\Delta=\Delta(P)と置く。写像f′:A→Rf':A\to\Rを

f′(a)={f(a)+Δ(a+ が P に現れるとき),f(a)−Δ(a− が P に現れるとき),f(a)(それ以外のとき)f'(a)= \begin{cases} f(a)+\Delta & (a^{+}\ \text{が}\ P\ \text{に現れるとき}),\\ f(a)-\Delta & (a^{-}\ \text{が}\ P\ \text{に現れるとき}),\\ f(a) & (\text{それ以外のとき}) \end{cases}

で定める。このときf′f'はフローであり、val⁡(f′)=val⁡(f)+Δ\operatorname{val}(f')=\operatorname{val}(f)+\Deltaが成り立つ。

証明. f′f'が矛盾なく定まること。増加道PPの頂点はすべて相異なる。弧a=(u,v)a=(u,v)についてa+a^{+}とa−a^{-}がともにPPに現れたとすると、PPはuuからvvへの移動とvvからuuへの移動をともに含むので、uuとvvがそれぞれ二度現れることになり、頂点が相異なることに反する。また、同じ残余弧がPPに二度現れることも、頂点が相異なることに反する。したがって上の場合分けは重複せず、f′f'は矛盾なく定まる。

容量制約。PPに現れない弧ではf′=ff'=fであるから制約は保たれる。a+a^{+}がPPに現れるときはΔ≤cf(a+)=c(a)−f(a)\Delta\le c_f(a^{+})=c(a)-f(a)であるから

0≤f(a)≤f(a)+Δ=f′(a)≤c(a)0\le f(a)\le f(a)+\Delta=f'(a)\le c(a)

が成り立つ。a−a^{-}がPPに現れるときはΔ≤cf(a−)=f(a)\Delta\le c_f(a^{-})=f(a)であるから

0≤f(a)−Δ=f′(a)≤f(a)≤c(a)0\le f(a)-\Delta=f'(a)\le f(a)\le c(a)

が成り立つ。

保存則と値。各頂点wwについてb(w)=∑a∈δ+(w)f(a)−∑a∈δ−(w)f(a)b(w)=\sum_{a\in\delta^{+}(w)}f(a)-\sum_{a\in\delta^{-}(w)}f(a)と置き、f′f'について同様に定めたものをb′(w)b'(w)と書く。PPに現れる残余弧rrの始点をxx、終点をyyとすると、rrによる流量の変更がbbに与える差は次のとおりである。r=a+r=a^{+}かつa=(x,y)a=(x,y)のときはf(a)f(a)がΔ\Deltaだけ増え、a∈δ+(x)a\in\delta^{+}(x)かつa∈δ−(y)a\in\delta^{-}(y)であるから、b(x)b(x)はΔ\Deltaだけ増えb(y)b(y)はΔ\Deltaだけ減る。r=a−r=a^{-}かつa=(y,x)a=(y,x)のときはf(a)f(a)がΔ\Deltaだけ減り、a∈δ+(y)a\in\delta^{+}(y)かつa∈δ−(x)a\in\delta^{-}(x)であるから、やはりb(x)b(x)はΔ\Deltaだけ増えb(y)b(y)はΔ\Deltaだけ減る。いずれの場合も、残余弧の始点で+Δ+\Delta、終点で−Δ-\Deltaの差が生じる。

増加道をs=w0, r1, w1, …, rk, wk=ts=w_0,\,r_1,\,w_1,\,\dots,\,r_k,\,w_k=tと書く。各rir_iはwi−1w_{i-1}を始点、wiw_iを終点とする。頂点wiw_i(0<i<k0<i<k)はrir_iの終点かつri+1r_{i+1}の始点であるから、差の総和は−Δ+Δ=0-\Delta+\Delta=0でありb′(wi)=b(wi)=0b'(w_i)=b(w_i)=0となる。PPに現れない頂点では流量が変わらないのでb′=bb'=bである。よってf′f'は保存則を満たし、フローである。s=w0s=w_0はr1r_1の始点であって、どのrir_iの終点でもないからb′(s)=b(s)+Δb'(s)=b(s)+\Deltaであり、val⁡(f′)=val⁡(f)+Δ\operatorname{val}(f')=\operatorname{val}(f)+\Deltaを得る。▨

5 最大フロー最小カット定理

5.1 証明方針

三条件の同値性を、定理 5.1 (1)⇒\Rightarrow(2)、定理 5.1 (2)⇒\Rightarrow(3)、定理 5.1 (3)⇒\Rightarrow(1)という巡回の形で示す。

定理 5.1 (1)⇒\Rightarrow(2)は対偶をとる。増加道が存在すれば補題 4.2により値の大きいフローが得られるので、もとのフローは最大でない。

定理 5.1 (3)⇒\Rightarrow(1)は命題 2.2の不等式から直ちに従う。

本質的な一手は定理 5.1 (2)⇒\Rightarrow(3)にある。増加道が存在しないという仮定を、カットの構成へ翻訳する。残余ネットワークDfD_fにおいてssから到達可能な頂点全体をSSと置く。増加道が存在しないことはttがssから到達不能であることに他ならないから、SSはss-ttカットである。次にSSの境界を調べる。SSから出る弧に容量までの余裕が残っていれば、その順方向残余弧によって外側の頂点が到達可能になるので、余裕は残っていない。SSへ入る弧に正の流量があれば、その逆方向残余弧によって外側の頂点が到達可能になるので、流量は零である。この二つの事実を命題 2.2の等式へ代入すると、val⁡(f)=c(S)\operatorname{val}(f)=c(S)が得られる。

最後に、最大フローと最小カットの値が一致することを述べるためには、最大フローが実在しなければならない。最大フローの存在は命題 3.2により得られる。従属選択公理を用いる段はここだけであり、三条件の同値の証明には用いない。

定理 5.1 (最大フロー最小カット定理). 非負実容量の有限ネットワーク(D,c,s,t)(D,c,s,t)において、フローffについての次の三条件は同値である。

  1. ffは最大フローである。
  2. 残余ネットワークDfD_fにssからttへの増加道が存在しない。
  3. val⁡(f)=c(S)\operatorname{val}(f)=c(S)を満たすss-ttカットSSが存在する。

さらに、従属選択公理を仮定すると、最大フローの値と最小カットの容量は等しい。三条件の同値の証明は選択公理を用いず、最後の主張だけが命題 3.2を経由して従属選択公理を用いる。

証明. (1)⇒\Rightarrow(2). 対偶を示す。DfD_fに増加道PPが存在すると仮定する。補題 4.2により、val⁡(f′)=val⁡(f)+Δ(P)\operatorname{val}(f')=\operatorname{val}(f)+\Delta(P)を満たすフローf′f'が存在する。Δ(P)>0\Delta(P)>0であるからval⁡(f′)>val⁡(f)\operatorname{val}(f')>\operatorname{val}(f)となり、ffは最大フローではない。

(2)⇒\Rightarrow(3).DfD_fにおいてssから到達可能な頂点全体をSSと置く。長さ00の有向道によりs∈Ss\in Sである。仮定によりssからttへの有向道は存在しないのでt∉St\notin Sである。したがってSSはss-ttカットである。

a=(u,v)∈δ+(S)a=(u,v)\in\delta^{+}(S)をとる。u∈Su\in Sかつv∉Sv\notin Sである。もしf(a)<c(a)f(a)<c(a)であるとすると、順方向残余弧a+a^{+}がDfD_fに存在し、uuからvvへ移ることができるのでv∈Sv\in Sとなって矛盾する。よってf(a)=c(a)f(a)=c(a)である。

a=(v,u)∈δ−(S)a=(v,u)\in\delta^{-}(S)をとる。u∈Su\in Sかつv∉Sv\notin Sである。もしf(a)>0f(a)>0であるとすると、逆方向残余弧a−a^{-}がuuを始点としvvを終点としてDfD_fに存在するのでv∈Sv\in Sとなって矛盾する。よってf(a)=0f(a)=0である。

これらを命題 2.2の等式へ代入すると

val⁡(f)=∑a∈δ+(S)f(a)−∑a∈δ−(S)f(a)=∑a∈δ+(S)c(a)−0=c(S)\operatorname{val}(f)=\sum_{a\in\delta^{+}(S)}f(a)-\sum_{a\in\delta^{-}(S)}f(a) =\sum_{a\in\delta^{+}(S)}c(a)-0=c(S)

を得る。

(3)⇒\Rightarrow(1).val⁡(f)=c(S)\operatorname{val}(f)=c(S)を満たすss-ttカットSSをとる。任意のフローf′f'について命題 2.2によりval⁡(f′)≤c(S)=val⁡(f)\operatorname{val}(f')\le c(S)=\operatorname{val}(f)が成り立つので、ffは最大フローである。

最大フローと最小カットの一致。命題 3.2により最大フローf∗f^{*}が存在する。(1)⇒\Rightarrow(2)と(2)⇒\Rightarrow(3)によりval⁡(f∗)=c(S∗)\operatorname{val}(f^{*})=c(S^{*})を満たすss-ttカットS∗S^{*}が存在する。任意のss-ttカットS′S'について命題 2.2によりc(S′)≥val⁡(f∗)=c(S∗)c(S')\ge\operatorname{val}(f^{*})=c(S^{*})であるから、S∗S^{*}は最小カットであり、最大フローの値と最小カットの容量はともにval⁡(f∗)\operatorname{val}(f^{*})に等しい。▨

6 Ford–Fulkerson 法と整数性

定理 5.1 (2)⇒\Rightarrow(1)は、増加道が見つからなくなるまで増加を繰り返す手続きが最大フローを与えることを意味する。ただし、この手続きが停止することは別に示す必要がある。ここでは容量がすべて非負整数である場合に停止性を証明する。

命題 6.1. ネットワーク(D,c,s,t)(D,c,s,t)の容量がすべて非負整数であるとする。各弧で値00をとるフローffから出発し、残余ネットワークDfD_fに増加道が存在するかぎり、増加道を一つ選んで補題 4.2の増加操作を行い、その結果を新しいffとする手続きを Ford–Fulkerson 法 (Ford–Fulkerson algorithm) という。この手続きは有限回の反復で停止し、停止時のフローは各弧で整数値をとる最大フローである。

証明. 不変条件。ループ不変条件(§D2.8 定義 1.1)として「現在のffはフローであり、各弧で整数値をとる」をとる。初期化では、各弧で値00をとる写像がフローであり整数値をとるので成り立つ。維持を示す。ffが整数値をとるフローであるとき、各弧aaでc(a)−f(a)c(a)-f(a)とf(a)f(a)はともに整数であるから、残余容量はすべて正の整数であり、選んだ増加道PPのボトルネックΔ(P)\Delta(P)は正の整数である。補題 4.2により増加操作の結果f′f'はフローであり、各弧でf′(a)f'(a)はf(a)f(a)に整数を加えるか引くかしたものであるから整数値をとる。よって不変条件は保たれる。

停止性。S0={s}S_0=\{s\}と置くと、s≠ts\ne tであるからS0S_0はss-ttカットである。容量が整数であるからc(S0)c(S_0)は非負整数である。ループの状態に対して

Φ=c(S0)−val⁡(f)\Phi=c(S_0)-\operatorname{val}(f)

と定める。ここでΦ\Phiは変量を表す記号であり、頂点集合VVとは無関係である。不変条件によりval⁡(f)\operatorname{val}(f)は整数であり、命題 2.2によりval⁡(f)≤c(S0)\operatorname{val}(f)\le c(S_0)であるから、Φ\Phiは非負整数である。本体を一度実行すると、上に述べたとおりΔ(P)\Delta(P)は正の整数であるからval⁡(f)\operatorname{val}(f)は11以上増え、Φ\Phiは狭義に減少する。したがって§D2.8 命題 1.4により手続きは有限回の反復で停止する。

終了。停止時にはループの継続条件が偽であり、残余ネットワークに増加道が存在しない。不変条件により停止時のffはフローであって各弧で整数値をとるから、定理 5.1 (2)⇒\Rightarrow(1)によりffは整数値をとる最大フローである。以上の三段は§D2.8 定理 1.2の形の議論であり、手続きは停止して最大フローを返す。▨

注意 6.2 (無理数の容量と停止性). 容量が無理数を含む場合、増加道の選び方によっては Ford–Fulkerson 法が停止せず、しかもフローの値が最大フローの値へ収束しない例が存在する。本記事ではこの例を構成せず、参考文献に挙げた研究へ委ねる。したがって、この注意の内容を本記事の他の主張の根拠として用いない。停止性の議論は容量が整数であることに依存しており、定理 5.1の主張そのものとは別の事柄である。同定理は非負実容量のもとで成り立ち、その証明では手続きの停止性を用いていない。

系 6.3. ネットワークの容量がすべて非負整数であるとき、各弧で整数値をとる最大フローが存在する。

証明.命題 6.1により、Ford–Fulkerson 法は有限回で停止し、停止時のフローは各弧で整数値をとる最大フローである。これが求める最大フローである。▨

7 検算例

例 7.1. 頂点集合を{s,a,b,t}\{s,a,b,t\}とし、弧と容量を

c(s,a)=3,c(s,b)=2,c(a,b)=1,c(a,t)=2,c(b,t)=3c(s,a)=3,\quad c(s,b)=2,\quad c(a,b)=1,\quad c(a,t)=2,\quad c(b,t)=3

と定める。各弧で値00をとるフローから出発して増加操作を三度行う。

  1. 増加道s→a→ts\to a\to tをとる。ボトルネックはmin⁡{3,2}=2\min\{3,2\}=2であり、この道に沿って22を流す。
  2. 増加道s→b→ts\to b\to tをとる。ボトルネックはmin⁡{2,3}=2\min\{2,3\}=2であり、この道に沿って22を流す。
  3. 増加道s→a→b→ts\to a\to b\to tをとる。残余容量は順に3−2=13-2=1、1−0=11-0=1、3−2=13-2=1であるからボトルネックは11であり、この道に沿って11を流す。

得られたフローは

f(s,a)=3,f(s,b)=2,f(a,b)=1,f(a,t)=2,f(b,t)=3f(s,a)=3,\quad f(s,b)=2,\quad f(a,b)=1,\quad f(a,t)=2,\quad f(b,t)=3

であり、値はval⁡(f)=f(s,a)+f(s,b)=3+2=5\operatorname{val}(f)=f(s,a)+f(s,b)=3+2=5である。この例では、5本の弧のすべてで流量が容量に等しい。保存則を確かめると、頂点aaでは入る量が33、出る量がf(a,b)+f(a,t)=1+2=3f(a,b)+f(a,t)=1+2=3であり、頂点bbでは入る量がf(s,b)+f(a,b)=2+1=3f(s,b)+f(a,b)=2+1=3、出る量がf(b,t)=3f(b,t)=3である。吸点ttへ入る量はf(a,t)+f(b,t)=2+3=5f(a,t)+f(b,t)=2+3=5であり、値と一致する。

このフローの残余ネットワークでは、ssを始点とする順方向残余弧が存在しない。c(s,a)−f(s,a)=0c(s,a)-f(s,a)=0かつc(s,b)−f(s,b)=0c(s,b)-f(s,b)=0であり、ssを終点とする弧が無いのでssを始点とする逆方向残余弧も存在しないからである。したがってssから到達可能な頂点はssだけであり、定理 5.1の証明が与えるカットはS={s}S=\{s\}である。その容量はc(s,a)+c(s,b)=3+2=5c(s,a)+c(s,b)=3+2=5であり、val⁡(f)=5\operatorname{val}(f)=5と一致する。

他のss-ttカットの容量も数える。S={s,a}S=\{s,a\}ではδ+(S)={(s,b),(a,b),(a,t)}\delta^{+}(S)=\{(s,b),(a,b),(a,t)\}であり容量は2+1+2=52+1+2=5である。S={s,b}S=\{s,b\}ではδ+(S)={(s,a),(b,t)}\delta^{+}(S)=\{(s,a),(b,t)\}であり容量は3+3=63+3=6である。S={s,a,b}S=\{s,a,b\}ではδ+(S)={(a,t),(b,t)}\delta^{+}(S)=\{(a,t),(b,t)\}であり容量は2+3=52+3=5である。いずれも55以上であり、最小カットの容量が55であることと整合する。容量がすべて整数であり、得られたフローも整数値をとるので、系 6.3とも整合する。

8 演習

問題 8.1.

  1. フローffと頂点w∈Vw\in Vに対しb(w)=∑a∈δ+(w)f(a)−∑a∈δ−(w)f(a)b(w)=\sum_{a\in\delta^{+}(w)}f(a)-\sum_{a\in\delta^{-}(w)}f(a)と置く。ss-ttカットとは限らない任意の頂点集合S⊆VS\subseteq Vについて∑w∈Sb(w)=∑a∈δ+(S)f(a)−∑a∈δ−(S)f(a)\sum_{w\in S}b(w)=\sum_{a\in\delta^{+}(S)}f(a)-\sum_{a\in\delta^{-}(S)}f(a)が成り立つことを示せ。これを用いてval⁡(f)=∑a∈δ−(t)f(a)−∑a∈δ+(t)f(a)\operatorname{val}(f)=\sum_{a\in\delta^{-}(t)}f(a)-\sum_{a\in\delta^{+}(t)}f(a)を証明し、SSがssとttをともに含む場合と、SSがttを含みssを含まない場合について、∑a∈δ+(S)f(a)−∑a∈δ−(S)f(a)\sum_{a\in\delta^{+}(S)}f(a)-\sum_{a\in\delta^{-}(S)}f(a)をval⁡(f)\operatorname{val}(f)で表せ。
  2. フローffに対し、頂点の列s=w0,w1,…,wk=ts=w_0,w_1,\dots,w_k=tとDfD_fの残余弧の列r1,…,rkr_1,\dots,r_kの組であって、各rir_iがwi−1w_{i-1}を始点、wiw_iを終点とするものを、ssからttへの残余歩道とよぶ。頂点w0,…,wkw_0,\dots,w_kは相異なるとは限らない。残余歩道WWに現れる残余弧の残余容量の最小値をΔ\Deltaとし、各弧aaについて、WWの列r1,…,rkr_1,\dots,r_kにa+a^{+}が現れる回数をpap_a、a−a^{-}が現れる回数をqaq_aとして、f′(a)=f(a)+(pa−qa)Δf'(a)=f(a)+(p_a-q_a)\Deltaと定める。f′f'が保存則を満たし、∑a∈δ+(s)f′(a)−∑a∈δ−(s)f′(a)=val⁡(f)+Δ\sum_{a\in\delta^{+}(s)}f'(a)-\sum_{a\in\delta^{-}(s)}f'(a)=\operatorname{val}(f)+\Deltaを満たすことを示せ。次に、f′f'が容量制約を満たさない例を、具体的なネットワークとフローによって作れ。さらに、DfD_fにssからttへの残余歩道が存在するならばDfD_fに増加道が存在することを示せ。
  3. 定理 5.1 (2)⇒\Rightarrow(3)で構成したカットSSが最小カットであることを、命題 2.2だけを用いて示せ。
  4. 命題 3.2の有界性の証明は、容量制約の上限f(a)≤c(a)f(a)\le c(a)を用いる。各a∈Aa\in Aでf(a)≥0f(a)\ge0を満たし、保存則を満たす写像f∈RAf\in\R^{A}全体の集合をF′F'とする。F′F'がRA\R^{A}の有界集合であるための必要十分条件は、DDが有向閉路をもたず、ssからttへの有向道もttからssへの有向道ももたないことであることを示せ。
  5. 容量がすべて非負の有理数であるとき、Ford–Fulkerson 法が有限回で停止することを、命題 6.1の証明の不変条件と変量をどう取り替えればよいかを示したうえで証明せよ。
解答.

(1)を示す。S⊆VS\subseteq Vとする。各弧はただ一つの始点をもつので、集合δ+(w)\delta^{+}(w)(w∈Sw\in S)は互いに素であり、その和集合は始点がSSに属する弧全体ASoutA^{\mathrm{out}}_Sである。同様に、集合δ−(w)\delta^{-}(w)(w∈Sw\in S)は互いに素であり、その和集合は終点がSSに属する弧全体ASinA^{\mathrm{in}}_Sである。したがって

∑w∈Sb(w)=∑a∈ASoutf(a)−∑a∈ASinf(a)\sum_{w\in S}b(w)=\sum_{a\in A^{\mathrm{out}}_S}f(a)-\sum_{a\in A^{\mathrm{in}}_S}f(a)

である。始点と終点がともにSSに属する弧の集合をASA_Sと置くと、ASoutA^{\mathrm{out}}_SはASA_Sとδ+(S)\delta^{+}(S)の互いに素な和集合であり、ASinA^{\mathrm{in}}_SはASA_Sとδ−(S)\delta^{-}(S)の互いに素な和集合である。ゆえに右辺の二つの和に共通するASA_Sの上の和が打ち消し合い

∑w∈Sb(w)=∑a∈δ+(S)f(a)−∑a∈δ−(S)f(a)\sum_{w\in S}b(w)=\sum_{a\in\delta^{+}(S)}f(a)-\sum_{a\in\delta^{-}(S)}f(a)

を得る。

次に、S=VS=Vとすると、始点か終点がVVに属さない弧は存在しないからδ+(V)=δ−(V)=∅\delta^{+}(V)=\delta^{-}(V)=\emptysetであり、∑w∈Vb(w)=0\sum_{w\in V}b(w)=0である。保存則によりw∈V∖{s,t}w\in V\setminus\{s,t\}ではb(w)=0b(w)=0であり、値の定義によりb(s)=val⁡(f)b(s)=\operatorname{val}(f)であるから、val⁡(f)+b(t)=0\operatorname{val}(f)+b(t)=0である。すなわち

val⁡(f)=−b(t)=∑a∈δ−(t)f(a)−∑a∈δ+(t)f(a)\operatorname{val}(f)=-b(t)=\sum_{a\in\delta^{-}(t)}f(a)-\sum_{a\in\delta^{+}(t)}f(a)

であり、湧点から正味に出る量と吸点へ正味に入る量は等しい。

SSがssとttをともに含むとき、SSのうちs,ts,t以外の頂点ではb=0b=0であるから、示した等式により∑a∈δ+(S)f(a)−∑a∈δ−(S)f(a)=b(s)+b(t)=val⁡(f)−val⁡(f)=0\sum_{a\in\delta^{+}(S)}f(a)-\sum_{a\in\delta^{-}(S)}f(a)=b(s)+b(t)=\operatorname{val}(f)-\operatorname{val}(f)=0である。SSがttを含みssを含まないとき、同様に∑a∈δ+(S)f(a)−∑a∈δ−(S)f(a)=b(t)=−val⁡(f)\sum_{a\in\delta^{+}(S)}f(a)-\sum_{a\in\delta^{-}(S)}f(a)=b(t)=-\operatorname{val}(f)である。

(2)を示す。i=1,…,ki=1,\dots,kについて、rir_iのもとの弧をaia_iとし、写像χi ⁣:A→R\chi_i\colon A\to\Rを、ri=ai+r_i=a_i^{+}のときχi(ai)=1\chi_i(a_i)=1、ri=ai−r_i=a_i^{-}のときχi(ai)=−1\chi_i(a_i)=-1とし、a≠aia\ne a_iではχi(a)=0\chi_i(a)=0と定める。pap_aとqaq_aの定義により、各弧aaについてf′(a)−f(a)=Δ∑i=1kχi(a)f'(a)-f(a)=\Delta\sum_{i=1}^{k}\chi_i(a)である。f′f'についてbbと同様に定めた量をb′b'と書き、頂点wwについて

βi(w)=∑a∈δ+(w)χi(a)−∑a∈δ−(w)χi(a)\beta_i(w)=\sum_{a\in\delta^{+}(w)}\chi_i(a)-\sum_{a\in\delta^{-}(w)}\chi_i(a)

と置くと、有限和の順序を入れ替えてb′(w)−b(w)=Δ∑i=1kβi(w)b'(w)-b(w)=\Delta\sum_{i=1}^{k}\beta_i(w)を得る。βi(w)\beta_i(w)を求める。ri=ai+r_i=a_i^{+}のときai=(wi−1,wi)a_i=(w_{i-1},w_i)であるから、ai∈δ+(wi−1)a_i\in\delta^{+}(w_{i-1})かつai∈δ−(wi)a_i\in\delta^{-}(w_i)である。ri=ai−r_i=a_i^{-}のときai=(wi,wi−1)a_i=(w_i,w_{i-1})であるから、ai∈δ+(wi)a_i\in\delta^{+}(w_i)かつai∈δ−(wi−1)a_i\in\delta^{-}(w_{i-1})である。残余弧の始点と終点はもとの弧の二つの端点であるからwi−1≠wiw_{i-1}\ne w_iであり、いずれの場合もβi(w)\beta_i(w)はw=wi−1w=w_{i-1}のとき11、w=wiw=w_iのとき−1-1、それ以外のとき00である。wwがwjw_jに等しいとき11、そうでないとき00である数を[w=wj][w=w_j]と書くと、βi(w)=[w=wi−1]−[w=wi]\beta_i(w)=[w=w_{i-1}]-[w=w_i]であり

∑i=1kβi(w)=∑i=1k([w=wi−1]−[w=wi])=[w=w0]−[w=wk]\sum_{i=1}^{k}\beta_i(w)=\sum_{i=1}^{k}\bigl([w=w_{i-1}]-[w=w_i]\bigr)=[w=w_0]-[w=w_k]

である。w0=sw_0=s、wk=tw_k=tであるから、w∈V∖{s,t}w\in V\setminus\{s,t\}ならばb′(w)=b(w)=0b'(w)=b(w)=0であり、f′f'は保存則を満たす。s≠ts\ne tであるからb′(s)=b(s)+Δ=val⁡(f)+Δb'(s)=b(s)+\Delta=\operatorname{val}(f)+\Deltaである。

f′f'が容量制約を満たさない例を作る。V={s,u,v,t}V=\{s,u,v,t\}、A={(s,u),(u,v),(v,u),(v,t)}A=\{(s,u),(u,v),(v,u),(v,t)\}とし、すべての弧の容量を11とする。各弧で値00をとるフローをffとする。DfD_fの残余弧は各弧aaの順方向残余弧a+a^{+}だけであり、残余容量はいずれも11である。頂点の列s,u,v,u,v,ts,u,v,u,v,tと残余弧の列(s,u)+,(u,v)+,(v,u)+,(u,v)+,(v,t)+(s,u)^{+},(u,v)^{+},(v,u)^{+},(u,v)^{+},(v,t)^{+}はssからttへの残余歩道であり、Δ=1\Delta=1である。(u,v)+(u,v)^{+}は二回現れるのでf′(u,v)=0+2⋅1=2f'(u,v)=0+2\cdot1=2であり、f′(u,v)>1=c(u,v)f'(u,v)>1=c(u,v)となって容量制約が破れる。ほかの三本の弧ではf′f'の値は11であり、頂点uuに入る量f′(s,u)+f′(v,u)=2f'(s,u)+f'(v,u)=2と出る量f′(u,v)=2f'(u,v)=2、頂点vvに入る量f′(u,v)=2f'(u,v)=2と出る量f′(v,u)+f′(v,t)=2f'(v,u)+f'(v,t)=2はそれぞれ等しく、前段で示したとおり保存則は保たれる。

最後に、DfD_fにssからttへの残余歩道が存在するとする。そのうち長さkkが最小のものをs=w0,…,wk=ts=w_0,\dots,w_k=t、r1,…,rkr_1,\dots,r_kとする。ある0≤i<j≤k0\le i<j\le kについてwi=wjw_i=w_jであると仮定する。w0=s≠t=wkw_0=s\ne t=w_kであるから(i,j)≠(0,k)(i,j)\ne(0,k)であり、頂点の列w0,…,wi,wj+1,…,wkw_0,\dots,w_i,w_{j+1},\dots,w_kと残余弧の列r1,…,ri,rj+1,…,rkr_1,\dots,r_i,r_{j+1},\dots,r_kを考える。rj+1r_{j+1}の始点はwj=wiw_j=w_iであるから、これはssからttへの残余歩道であり、その長さk−(j−i)k-(j-i)はkkより小さい。これはkkの最小性に反する。ゆえにw0,…,wkw_0,\dots,w_kは相異なり、この残余歩道は増加道である。したがって、DfD_fにおいて頂点の重複を許してたどってssからttへ至ることができるならば、補題 4.2を適用できる増加道が存在する。

(3)を示す。ffを、DfD_fに増加道が存在しないフローとし、SSをDfD_fにおいてssから到達可能な頂点全体とする。本文の証明により、SSはss-ttカットであり、val⁡(f)=c(S)\operatorname{val}(f)=c(S)が成り立つ。任意のss-ttカットS′S'をとると、命題 2.2をffとS′S'に適用してval⁡(f)≤c(S′)\operatorname{val}(f)\le c(S')を得る。したがってc(S)=val⁡(f)≤c(S′)c(S)=\operatorname{val}(f)\le c(S')である。S′S'は任意であったから、SSは容量が最小であるss-ttカット、すなわち最小カットである。

(4)を示す。弧の集合B⊆AB\subseteq Aと実数λ≥0\lambda\ge0に対し、a∈Ba\in Bで値λ\lambda、a∉Ba\notin Bで値00をとる写像をλ1B∈RA\lambda\mathbf 1_B\in\R^{A}と書く。

必要性を対偶で示す。DDが有向閉路v0,v1,…,vk=v0v_0,v_1,\dots,v_k=v_0(k≥1k\ge1、v0,…,vk−1v_0,\dots,v_{k-1}は相異なる)をもつとする。自己ループが無いのでk≥2k\ge2である。B={(vi−1,vi):1≤i≤k}B=\{(v_{i-1},v_i):1\le i\le k\}と置く。BBの弧の始点v0,…,vk−1v_0,\dots,v_{k-1}は相異なり、終点v1,…,vk−1,vk=v0v_1,\dots,v_{k-1},v_k=v_0も相異なる。ゆえに、v0,…,vk−1v_0,\dots,v_{k-1}のどれか一つに等しい頂点は、BBの弧のちょうど一本の始点であり、ちょうど一本の終点である。それ以外の頂点はBBのどの弧の始点でも終点でもない。したがって、任意のλ≥0\lambda\ge0と任意の頂点wwについて∑a∈δ−(w)λ1B(a)=∑a∈δ+(w)λ1B(a)\sum_{a\in\delta^{-}(w)}\lambda\mathbf 1_B(a)=\sum_{a\in\delta^{+}(w)}\lambda\mathbf 1_B(a)が成り立ち、λ1B∈F′\lambda\mathbf 1_B\in F'である。DDがssからttへの有向道s=v0,v1,…,vk=ts=v_0,v_1,\dots,v_k=tをもつときは、s≠ts\ne tであるからk≥1k\ge1であり、B={(vi−1,vi):1≤i≤k}B=\{(v_{i-1},v_i):1\le i\le k\}と置く。頂点が相異なるので、v1,…,vk−1v_1,\dots,v_{k-1}はそれぞれBBのちょうど一本の弧の始点かつちょうど一本の弧の終点であり、道に現れない頂点はBBの弧の端点でない。保存則はs,ts,t以外の頂点でだけ課されるので、λ1B∈F′\lambda\mathbf 1_B\in F'である。ttからssへの有向道をもつときも同様である。いずれの場合もB≠∅B\ne\emptysetであり、ρ2(λ1B,0)=λ∣B∣\rho_2(\lambda\mathbf 1_B,0)=\lambda\sqrt{\lvert B\rvert}である。任意の点x∈RAx\in\R^{A}とr>0r>0について、中心xx、半径rrの開球は三角不等式により中心00、半径ρ2(x,0)+r\rho_2(x,0)+rの開球に含まれる。λ>ρ2(x,0)+r\lambda>\rho_2(x,0)+rと取ればλ1B\lambda\mathbf 1_Bはその開球に属さないので、F′F'はどの開球にも含まれず、有界でない。

十分性を示す。DDが有向閉路をもたず、ssからttへの有向道もttからssへの有向道ももたないとする。F′={0}F'=\{0\}を示せば、F′F'は有界である。00でないf∈F′f\in F'が存在すると仮定し、A+={a∈A:f(a)>0}A_{+}=\{a\in A:f(a)>0\}と置くとA+≠∅A_{+}\ne\emptysetである。まず、w∈V∖{s,t}w\in V\setminus\{s,t\}について、A+A_{+}のある弧がwwを終点とするならば、A+A_{+}のある弧がwwを始点とすることを示す。ffの値は非負であるから∑a∈δ−(w)f(a)>0\sum_{a\in\delta^{-}(w)}f(a)>0であり、保存則により∑a∈δ+(w)f(a)>0\sum_{a\in\delta^{+}(w)}f(a)>0であるから、δ+(w)\delta^{+}(w)のある弧でffは正である。同じ論法により、A+A_{+}のある弧がwwを始点とするならば、A+A_{+}のある弧がwwを終点とする。

頂点が相異なる列x0,x1,…,xmx_0,x_1,\dots,x_mであって、1≤i≤m1\le i\le mのすべてで(xi−1,xi)∈A+(x_{i-1},x_i)\in A_{+}を満たすものを考える。A+A_{+}の弧の始点と終点の列はこの条件をm=1m=1で満たし、頂点が相異なるのでm≤∣V∣−1m\le\lvert V\rvert-1である。そこでmmが最大のものを一つとる。xm∉{s,t}x_m\notin\{s,t\}と仮定する。(xm−1,xm)∈A+(x_{m-1},x_m)\in A_{+}であるから、前段により(xm,y)∈A+(x_m,y)\in A_{+}を満たす頂点yyが存在し、自己ループが無いのでy≠xmy\ne x_mである。ある0≤i≤m−10\le i\le m-1についてy=xiy=x_iならば、xi,xi+1,…,xm,xix_i,x_{i+1},\dots,x_m,x_iは長さm−i+1m-i+1の閉じた有向歩道であり、xi,…,xmx_i,\dots,x_mは相異なるのでDDの有向閉路である。これは仮定に反する。そうでなければ、列x0,…,xm,yx_0,\dots,x_m,yは頂点が相異なりmmの最大性に反する。ゆえにxm∈{s,t}x_m\in\{s,t\}である。同様に、x0∉{s,t}x_0\notin\{s,t\}と仮定すると、(x0,x1)∈A+(x_0,x_1)\in A_{+}であるから(z,x0)∈A+(z,x_0)\in A_{+}を満たす頂点z≠x0z\ne x_0が存在する。ある1≤i≤m1\le i\le mについてz=xiz=x_iならばx0,…,xi,x0x_0,\dots,x_i,x_0はDDの有向閉路であり、そうでなければ列z,x0,…,xmz,x_0,\dots,x_mはmmの最大性に反する。ゆえにx0∈{s,t}x_0\in\{s,t\}である。m≥1m\ge1であり頂点は相異なるのでx0≠xmx_0\ne x_mであり、x0,…,xmx_0,\dots,x_mはssからttへの有向道、またはttからssへの有向道である。これは仮定に反する。したがってF′={0}F'=\{0\}である。

たとえばV={s,v,t}V=\{s,v,t\}、A={(s,v),(v,t)}A=\{(s,v),(v,t)\}のネットワークではssからttへの有向道s,v,ts,v,tがあるので、F′F'は有界でない。実際、正の実数λ\lambdaに対しf(s,v)=f(v,t)=λf(s,v)=f(v,t)=\lambdaと置いた写像はF′F'に属する。

(5)を示す。各弧aaについて、整数ma≥0m_a\ge0と正の整数nan_aを用いてc(a)=ma/nac(a)=m_a/n_aと書く。q=∏a∈Anaq=\prod_{a\in A}n_aと置く(A=∅A=\emptysetのときはq=1q=1とする)。qqは正の整数であり、各弧aaについてqc(a)=ma∏b∈A, b≠anbqc(a)=m_a\prod_{b\in A,\,b\ne a}n_bは整数である。不変条件を「現在のffはフローであり、各弧aaでqf(a)qf(a)が整数である」に取り替え、変量を

Φq=q(c(S0)−val⁡(f))\Phi_q=q\bigl(c(S_0)-\operatorname{val}(f)\bigr)

に取り替える。ここでS0={s}S_0=\{s\}である。

不変条件を示す。初期化では、各弧で値00をとる写像がフローであり、q⋅0=0q\cdot0=0は整数であるから成り立つ。維持を示す。ffが不変条件を満たすとき、各弧aaでq(c(a)−f(a))q(c(a)-f(a))とqf(a)qf(a)はともに整数である。正の実数xxについてqxqxが整数ならばqx≥1qx\ge1、すなわちx≥1/qx\ge1/qであるから、残余容量はいずれも1/q1/q以上であり、qq倍すると正の整数になる。増加道PPのボトルネックΔ(P)\Delta(P)はPPに現れる残余弧の残余容量の一つであるから、qΔ(P)q\Delta(P)は正の整数である。補題 4.2により増加操作の結果f′f'はフローであり、各弧でqf′(a)qf'(a)はqf(a)qf(a)、qf(a)+qΔ(P)qf(a)+q\Delta(P)、qf(a)−qΔ(P)qf(a)-q\Delta(P)のいずれかであるから整数である。よって不変条件は保たれる。

停止性を示す。qc(S0)=∑a∈δ+(S0)qc(a)qc(S_0)=\sum_{a\in\delta^{+}(S_0)}qc(a)は整数の和であるから整数であり、不変条件によりqval⁡(f)=∑a∈δ+(s)qf(a)−∑a∈δ−(s)qf(a)q\operatorname{val}(f)=\sum_{a\in\delta^{+}(s)}qf(a)-\sum_{a\in\delta^{-}(s)}qf(a)も整数である。命題 2.2によりval⁡(f)≤c(S0)\operatorname{val}(f)\le c(S_0)であるから、Φq\Phi_qは非負整数である。本体を一度実行するとval⁡(f)\operatorname{val}(f)はΔ(P)\Delta(P)だけ増え、Φq\Phi_qは正の整数qΔ(P)q\Delta(P)だけ減るので、Φq\Phi_qは狭義に減少する。したがって§D2.8 命題 1.4により手続きは有限回の反復で停止する。停止時にはDfD_fに増加道が存在しないので、定理 5.1 (2)⇒\Rightarrow(1)により停止時のffは最大フローであり、不変条件により各弧でqf(a)qf(a)は整数である。▨

注意 8.2. 増加道の選び方に応じた反復回数の上界、一般の線形計画双対性、係数行列の全単模性および二部マッチングへの帰着は、本記事では扱っていない。

参考文献

  1. Reinhard Diestel, Graph Theory, 6th ed., Graduate Texts in Mathematics 173, Springer, Berlin, 2025.弧ごとの流量による定式化と、最大フロー最小カット定理の証明の構成を参考にした。
  2. Bernhard Korte and Jens Vygen, Combinatorial Optimization: Theory and Algorithms, 6th ed., Algorithms and Combinatorics, Springer, 2018.残余ネットワークと増加道による証明、および整数容量における Ford–Fulkerson 法の停止性を参考にした。
  3. Uri Zwick, The smallest networks on which the Ford–Fulkerson maximum flow procedure may fail to terminate, Theoretical Computer Science 148 (1995), 165–170.無理数の容量に対して Ford–Fulkerson 法が停止しない例が存在することを参考にした。

前提記事