最大フロー問題

読み:さいだいふろーもんだい / 英語表記:maximum flow problem

ネットワークの各区間に、同時に流せる量(容量)の上限があるとき、出発点から到着点まで、全体で同時に最大どれだけ流せるかを求める問題。最大の流量は、ネットワークを出発側と到着側に分ける切り口のうち、容量の合計が最も小さいもの(最小カット)の値に等しい。

イマシルちゃんの解説

水道管のネットワークを思い浮かべてみて。
太い管も細い管もあって、それぞれ流せる水の量に限りがあるんだ。

スタートからゴールまで、いろんな道を同時に使って、全部でどれだけ水を流せるかな?
答えは、途中の「いちばん細いところ」で決まっちゃうんだ。
ただし、その「細いところ」は、1本の管じゃなくて、何本かの管をまとめて見て探すのがポイントなんだよ。

より深い解説

定義

各辺(区間)に容量が決められたネットワークで、出発点(ソース)から到着点(シンク)へ流す量を、次の条件を守りながら最大にする問題である。

通信では、地点の間の論理回線の多重度(同時に使える回線数)を容量とみなし、2地点の間で同時に使える回線の最大数を求めるのに使う。

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

ネットワークの点を、出発点を含む組と、到着点を含む組の2つに分けたとき、2つの組をまたぐ区間を切ると、流れは止まる。この切り口をカットといい、またぐ区間の容量の合計をカットの容量という。

最大の流量 = すべてのカットのうち、容量が最小のもの(最小カット)の値

どこで切っても、流れはそのカットの容量を超えられない。そして、最も細いカットまでは、必ず流すことができる。

例

区間容量
S−A3
S−B2
A−B1
A−T2
B−T3
カット(S側の組)またぐ区間容量
{S}S−A、S−B3+2=5
{S、A}A−T、A−B、S−B2+1+2=5
{S、B}S−A、A−B、B−T3+1+3=7
{S、A、B}A−T、B−T2+3=5

最小カットは5なので、最大の流量は5である。実際に、S→A→T に2、S→A→B→T に1、S→B→T に2を流すと、合計5になる。

解き方のコツ

実際の試験ではここに出る!

↑