Dinicのアルゴリズム
$ \mathrm{O}(|E||V|^2)?
事前定義
$ Aを一回$ fに適用することで、アルゴリズムが一回反復されたことを意味する。 $ s, t \in V: 始点と終点
要するに
そして、それらのパスを一度に詰まらせるフローを作る そのフローを足し合わせることで更新して繰り返す
改良点
頂点$ v \in Vに対し、$ \mathrm{level}(v)は $ sから$ tが到達不可能な場合は$ +\infinとする。 $ G_fの部分グラフ$ L_f := (V_{Lf} \sub V, E_{Lf} \sub E, c_f)で、以下を全て満たすもの。 (1) $ v \in V_{Lf} \Leftrightarrow \mathrm{level}(v) < + \infin
(2) $ (v, w) \in E_{Lf} \Leftrightarrow \mathrm{level}(w) = \mathrm{level}(v) + 1
$ vの最短路を一つ伸ばして$ wに到達できる場合にだけ辺を引く。 仮に閉路$ rがあったと仮定する。閉路$ rの辺数を$ lとしよう。 このとき、閉路$ r中の辺を一つ経るたびに辺のレベルは1増大する。 つまり、$ rを巡回すれば、レベルは$ l増加する。
点$ wに対して、
$ \mathrm{level}(w)
$ \mathrm{level}(w) + l
$ \mathrm{level}(w) + 2l
$ \vdots
という複数のレベルを評価することができる。しかし、これはレベルが関数であることと矛盾している。 以上より、レベルグラフには閉路が存在せず、DAGである。 /icons/notepad.icon付記
始点$ sから終点$ tまでの任意のパス$ pに対して、$ f'(e) = c_{f}(e)のように飽和している辺$ eが$ p中に存在している 参考文献