Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
HCPC: 北海道大学競技プログラミングサークル
PDF, PPTX
13,971 views
最大流 (max flow)
Nov 05, 2018 北海道大学競技プログラミングサークル勉強会
Technology
◦
Read more
8
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 102
2
/ 102
3
/ 102
4
/ 102
5
/ 102
6
/ 102
7
/ 102
8
/ 102
9
/ 102
10
/ 102
11
/ 102
12
/ 102
13
/ 102
14
/ 102
15
/ 102
16
/ 102
17
/ 102
18
/ 102
19
/ 102
20
/ 102
21
/ 102
22
/ 102
23
/ 102
24
/ 102
25
/ 102
26
/ 102
27
/ 102
28
/ 102
29
/ 102
30
/ 102
31
/ 102
32
/ 102
33
/ 102
34
/ 102
35
/ 102
36
/ 102
37
/ 102
38
/ 102
39
/ 102
40
/ 102
41
/ 102
42
/ 102
43
/ 102
44
/ 102
Most read
45
/ 102
46
/ 102
47
/ 102
48
/ 102
49
/ 102
50
/ 102
51
/ 102
52
/ 102
53
/ 102
54
/ 102
55
/ 102
56
/ 102
57
/ 102
58
/ 102
59
/ 102
60
/ 102
61
/ 102
62
/ 102
63
/ 102
64
/ 102
65
/ 102
66
/ 102
67
/ 102
68
/ 102
69
/ 102
70
/ 102
71
/ 102
72
/ 102
73
/ 102
74
/ 102
75
/ 102
76
/ 102
77
/ 102
78
/ 102
79
/ 102
80
/ 102
81
/ 102
82
/ 102
83
/ 102
84
/ 102
85
/ 102
86
/ 102
87
/ 102
88
/ 102
89
/ 102
90
/ 102
Most read
91
/ 102
92
/ 102
93
/ 102
94
/ 102
95
/ 102
Most read
96
/ 102
97
/ 102
98
/ 102
99
/ 102
100
/ 102
101
/ 102
102
/ 102
More Related Content
PDF
Binary indexed tree
by
HCPC: 北海道大学競技プログラミングサークル
PDF
最小カットを使って「燃やす埋める問題」を解く
by
shindannin
PDF
様々な全域木問題
by
tmaehara
PPTX
動的計画法を極める!
by
HCPC: 北海道大学競技プログラミングサークル
PDF
プログラミングコンテストでのデータ構造
by
Takuya Akiba
PDF
RMQ クエリ処理
by
HCPC: 北海道大学競技プログラミングサークル
PDF
プログラミングコンテストでの動的計画法
by
Takuya Akiba
PDF
Union find(素集合データ構造)
by
AtCoder Inc.
Binary indexed tree
by
HCPC: 北海道大学競技プログラミングサークル
最小カットを使って「燃やす埋める問題」を解く
by
shindannin
様々な全域木問題
by
tmaehara
動的計画法を極める!
by
HCPC: 北海道大学競技プログラミングサークル
プログラミングコンテストでのデータ構造
by
Takuya Akiba
RMQ クエリ処理
by
HCPC: 北海道大学競技プログラミングサークル
プログラミングコンテストでの動的計画法
by
Takuya Akiba
Union find(素集合データ構造)
by
AtCoder Inc.
What's hot
PDF
グラフネットワーク〜フロー&カット〜
by
HCPC: 北海道大学競技プログラミングサークル
PDF
プログラミングコンテストでの乱択アルゴリズム
by
Takuya Akiba
PDF
Convex Hull Trick
by
HCPC: 北海道大学競技プログラミングサークル
PDF
双対性
by
Yoichi Iwata
PDF
色々なダイクストラ高速化
by
yosupo
PDF
ウェーブレット木の世界
by
Preferred Networks
PDF
プログラミングコンテストでのデータ構造 2 ~動的木編~
by
Takuya Akiba
PDF
Rolling Hashを殺す話
by
Nagisa Eto
PDF
abc027
by
AtCoder Inc.
PDF
AtCoder Beginner Contest 006 解説
by
AtCoder Inc.
PDF
指数時間アルゴリズム入門
by
Yoichi Iwata
PDF
AtCoder Beginner Contest 023 解説
by
AtCoder Inc.
PDF
Rolling hash
by
HCPC: 北海道大学競技プログラミングサークル
PDF
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
by
Takuya Akiba
PDF
AtCoder Beginner Contest 015 解説
by
AtCoder Inc.
PDF
AtCoder Beginner Contest 011 解説
by
AtCoder Inc.
PPTX
AtCoder Beginner Contest 034 解説
by
AtCoder Inc.
PDF
AtCoder Regular Contest 039 解説
by
AtCoder Inc.
PDF
Re永続データ構造が分からない人のためのスライド
by
Masaki Hara
PDF
AtCoder Regular Contest 037 解説
by
AtCoder Inc.
グラフネットワーク〜フロー&カット〜
by
HCPC: 北海道大学競技プログラミングサークル
プログラミングコンテストでの乱択アルゴリズム
by
Takuya Akiba
Convex Hull Trick
by
HCPC: 北海道大学競技プログラミングサークル
双対性
by
Yoichi Iwata
色々なダイクストラ高速化
by
yosupo
ウェーブレット木の世界
by
Preferred Networks
プログラミングコンテストでのデータ構造 2 ~動的木編~
by
Takuya Akiba
Rolling Hashを殺す話
by
Nagisa Eto
abc027
by
AtCoder Inc.
AtCoder Beginner Contest 006 解説
by
AtCoder Inc.
指数時間アルゴリズム入門
by
Yoichi Iwata
AtCoder Beginner Contest 023 解説
by
AtCoder Inc.
Rolling hash
by
HCPC: 北海道大学競技プログラミングサークル
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
by
Takuya Akiba
AtCoder Beginner Contest 015 解説
by
AtCoder Inc.
AtCoder Beginner Contest 011 解説
by
AtCoder Inc.
AtCoder Beginner Contest 034 解説
by
AtCoder Inc.
AtCoder Regular Contest 039 解説
by
AtCoder Inc.
Re永続データ構造が分からない人のためのスライド
by
Masaki Hara
AtCoder Regular Contest 037 解説
by
AtCoder Inc.
Similar to 最大流 (max flow)
PPTX
『劣モジュラ最適化と機械学習』 4章
by
ayato shimada
PDF
KMC 競技プログラミング練習会 Advanced 第3回 ふろー
by
kyoto university
PDF
Boundary Conditions in OpenFOAM
by
Fumiya Nozaki
PDF
ネットワークフローとその代表的な問題
by
紘也 金子
PPT
Introduction to Algorithms#24 Shortest-Paths Problem
by
Naoya Ito
KEY
JOIsummercamp2012
by
Shunya Satake
PPTX
Multi terminal networkflows
by
Masashi Nitta
PDF
Maximum flows by ibfs
by
nitmk
PDF
競技プログラミング練習会2015 Normal 第3回
by
Hideaki Nagamine
PDF
競技プログラミングで用いられる二分探索をC++で実装してみた
by
佐藤 裕翔
PPTX
ネットワークフロー
by
Kohei Shinohara
PDF
130323 slide all
by
ikea0064
PDF
DDPC 2016 予選 解説
by
AtCoder Inc.
PDF
CODE THANKS FESTIVAL 2014 A日程 解説
by
AtCoder Inc.
PPTX
Problem F
by
Yohei Ito
PDF
JOI春季ステップアップセミナー 2021 講義スライド
by
Kensuke Otsuki
PDF
NPCA summer 2014
by
okuraofvegetable
PPTX
Arc 010 d
by
Yuma Inoue
PDF
Moon
by
Ken Ogura
PPTX
202007勉強会資料 ストリームアルゴリズム
by
Makoto Kataigi
『劣モジュラ最適化と機械学習』 4章
by
ayato shimada
KMC 競技プログラミング練習会 Advanced 第3回 ふろー
by
kyoto university
Boundary Conditions in OpenFOAM
by
Fumiya Nozaki
ネットワークフローとその代表的な問題
by
紘也 金子
Introduction to Algorithms#24 Shortest-Paths Problem
by
Naoya Ito
JOIsummercamp2012
by
Shunya Satake
Multi terminal networkflows
by
Masashi Nitta
Maximum flows by ibfs
by
nitmk
競技プログラミング練習会2015 Normal 第3回
by
Hideaki Nagamine
競技プログラミングで用いられる二分探索をC++で実装してみた
by
佐藤 裕翔
ネットワークフロー
by
Kohei Shinohara
130323 slide all
by
ikea0064
DDPC 2016 予選 解説
by
AtCoder Inc.
CODE THANKS FESTIVAL 2014 A日程 解説
by
AtCoder Inc.
Problem F
by
Yohei Ito
JOI春季ステップアップセミナー 2021 講義スライド
by
Kensuke Otsuki
NPCA summer 2014
by
okuraofvegetable
Arc 010 d
by
Yuma Inoue
Moon
by
Ken Ogura
202007勉強会資料 ストリームアルゴリズム
by
Makoto Kataigi
More from HCPC: 北海道大学競技プログラミングサークル
PDF
写像 12 相
by
HCPC: 北海道大学競技プログラミングサークル
PDF
プログラミングコンテスト基礎テクニック
by
HCPC: 北海道大学競技プログラミングサークル
PDF
ACPC 2019 Day3 A: 間違い探し
by
HCPC: 北海道大学競技プログラミングサークル
PDF
ACPC 2019 Day3 F: 部分文字列分解
by
HCPC: 北海道大学競技プログラミングサークル
PDF
HUPC 2019 Day1 D: 貪欲が最適?
by
HCPC: 北海道大学競技プログラミングサークル
PDF
ACPC 2019 Day3 B: パフェ
by
HCPC: 北海道大学競技プログラミングサークル
PDF
ACPC 2019 Day3 E: 総和の切り取り
by
HCPC: 北海道大学競技プログラミングサークル
PDF
HUPC 2019 Day1 E: 最短経路の復元
by
HCPC: 北海道大学競技プログラミングサークル
PDF
ACPC 2017 Day3 F: 掛け算は楽しい
by
HCPC: 北海道大学競技プログラミングサークル
PDF
HUPC 2019 Day2 C: 串刺し
by
HCPC: 北海道大学競技プログラミングサークル
PDF
ACPC 2019 Day3 G: Restricted DFS
by
HCPC: 北海道大学競技プログラミングサークル
PDF
HUPC 2019 Day1 C: 短絡評価
by
HCPC: 北海道大学競技プログラミングサークル
PDF
HUPC 2019 Day1 F: グリッドの番号
by
HCPC: 北海道大学競技プログラミングサークル
PDF
ACPC 2017 Day3 D: 優柔不断
by
HCPC: 北海道大学競技プログラミングサークル
PDF
HUPC 2019 Day1 A: four tea
by
HCPC: 北海道大学競技プログラミングサークル
PDF
HUPC 2019 Day2 F: MOD Rush
by
HCPC: 北海道大学競技プログラミングサークル
PDF
HUPC 2019 Day1 B: 自身の 2 倍
by
HCPC: 北海道大学競技プログラミングサークル
PDF
HUPC 2019 Day2 H: Revenge of UMG
by
HCPC: 北海道大学競技プログラミングサークル
PDF
HUPC 2019 Day2 E: ジャム
by
HCPC: 北海道大学競技プログラミングサークル
PDF
HUPC 2019 Day2 G: 木
by
HCPC: 北海道大学競技プログラミングサークル
写像 12 相
by
HCPC: 北海道大学競技プログラミングサークル
プログラミングコンテスト基礎テクニック
by
HCPC: 北海道大学競技プログラミングサークル
ACPC 2019 Day3 A: 間違い探し
by
HCPC: 北海道大学競技プログラミングサークル
ACPC 2019 Day3 F: 部分文字列分解
by
HCPC: 北海道大学競技プログラミングサークル
HUPC 2019 Day1 D: 貪欲が最適?
by
HCPC: 北海道大学競技プログラミングサークル
ACPC 2019 Day3 B: パフェ
by
HCPC: 北海道大学競技プログラミングサークル
ACPC 2019 Day3 E: 総和の切り取り
by
HCPC: 北海道大学競技プログラミングサークル
HUPC 2019 Day1 E: 最短経路の復元
by
HCPC: 北海道大学競技プログラミングサークル
ACPC 2017 Day3 F: 掛け算は楽しい
by
HCPC: 北海道大学競技プログラミングサークル
HUPC 2019 Day2 C: 串刺し
by
HCPC: 北海道大学競技プログラミングサークル
ACPC 2019 Day3 G: Restricted DFS
by
HCPC: 北海道大学競技プログラミングサークル
HUPC 2019 Day1 C: 短絡評価
by
HCPC: 北海道大学競技プログラミングサークル
HUPC 2019 Day1 F: グリッドの番号
by
HCPC: 北海道大学競技プログラミングサークル
ACPC 2017 Day3 D: 優柔不断
by
HCPC: 北海道大学競技プログラミングサークル
HUPC 2019 Day1 A: four tea
by
HCPC: 北海道大学競技プログラミングサークル
HUPC 2019 Day2 F: MOD Rush
by
HCPC: 北海道大学競技プログラミングサークル
HUPC 2019 Day1 B: 自身の 2 倍
by
HCPC: 北海道大学競技プログラミングサークル
HUPC 2019 Day2 H: Revenge of UMG
by
HCPC: 北海道大学競技プログラミングサークル
HUPC 2019 Day2 E: ジャム
by
HCPC: 北海道大学競技プログラミングサークル
HUPC 2019 Day2 G: 木
by
HCPC: 北海道大学競技プログラミングサークル
最大流 (max flow)
1.
国立大学法人 北海道大学 工学部情報エレクトロニクス学科 情報理工学コース情報知識ネットワーク研究室 学部三年 大泉翼
2.
はじめに 本スライドは蟻本に沿った内容になります。 二部マッチングの証明のみ自分で考えたもので、不備がある可能性 がございます。どうぞご指摘下さい。 また、グラフに逆辺を張る操作を図にするので、図が見えにくいです が、頑張ってみてください。
3.
目次 • 最大フロー、最小カットのお話 • 競プロのお話
4.
目次 • 最大フロー、最小カットのお話 • 競プロのお話
5.
前提知識 𝛿− 𝑣 :=
頂点 v へ入ってくる辺の集合 𝛿+ 𝑣 := 頂点 v から出ていく辺の集合 二部グラフ 以下の性質を満たす頂点集合の分割 (S, 𝑉 ∖ 𝑆)が存在する -グラフのどの辺も 𝑆 の要素の頂点と、 𝑉 ∖ 𝑆 の要素の頂点とに接続している
6.
最大フローとは 有向グラフ 𝐺 =
𝑉, 𝐸 において、各有向辺 𝑒 に負でない実数 𝑐(𝑒), 𝑒 ∈ 𝐸 が定 められているとする。 [定義] フローとは、 𝐺 の各有向辺 𝑒 に負でない値 𝑓 𝑒 を割り当てる関数 𝑓 が存在し、次 の性質を満たすものをいう。 ・ e ∈ 𝐸に対して f e ≤ 𝑐 𝑒 ・ v ∈ 𝑉 ∖ {𝑠, 𝑡} に対して 𝑒 ∈ 𝛿− 𝑣 𝑓 𝑒 = 𝑒 ∈ 𝛿+ 𝑣 𝑓(𝑒) 𝑒 ∈ 𝛿+ 𝑠 𝑓 𝑒 = 𝑒 ∈ 𝛿− 𝑡 𝑓(𝑒) = フロー値 フロー値が最大になるフローを最大フローという
7.
最大フローとは 重みつき有向グラフ G において 各辺の容量を超えずに
s から t に送ることのできる量の最大値
8.
最大フローとは 重みつき有向グラフ G において 各辺の容量を超えずに
s から t に送ることのできる量の最大値 𝑠 𝑢5 𝑢4 𝑡 4 2 1 4
9.
最大フローとは 重みつき有向グラフ G において 各辺の容量を超えずに
s から t に送ることのできる量の最大値 𝑠 𝑢5 𝑢4 𝑡 1/4 2/2 1/1 2/4
10.
最大フローとは 重みつき有向グラフ G において 各辺の容量を超えずに
s から t に送ることのできる量の最大値 𝑠 𝑢5 𝑢4 𝑡 4 2 1 4 1
11.
最大フローとは 重みつき有向グラフ G において 各辺の容量を超えずに
s から t に送ることのできる量の最大値 𝑠 𝑢5 𝑢4 𝑡 2/4 2/2 1/1 3/4 1/1
12.
最大フローとは 重みつき有向グラフ G において 各辺の容量を超えずに
s から t に送ることのできる量の最大値 𝑠 𝑢5 𝑢4 𝑡 4 2 1 4 1000000000
13.
最大フローとは 重みつき有向グラフ G において 各辺の容量を超えずに
s から t に送ることのできる量の最大値 𝑠 𝑢5 𝑢4 𝑡 1/4 2/2 1/1 2/4 0/1000000000
14.
最大フローとは 重みつき有向グラフ G において 各辺の容量を超えずに
s から t に送ることのできる量の最大値 𝑠 𝑢1 𝑢3 𝑢2 𝑢5 𝑢4 𝑡 1 4 3 4 2 1 1 2 4 2 1
15.
最大フローとは 重みつき有向グラフ G において 各辺の容量を超えずに
s から t に送ることのできる量の最大値 𝑠 𝑢1 𝑢3 𝑢2 𝑢5 𝑢4 𝑡 1/1 1/4 3/3 1/4 2/2 1/1 1/1 0/2 3/4 2/2 1/1
16.
貪欲のアルゴリズム? • (1)流せる余地のある辺のみを使って s
から t へのパスを見つける • (2)見つかれば目一杯流して、(1)に戻る。見つからなければ終了 𝑠 𝑢2 𝑢1 𝑢3 8 2 10 6 t 5 3 6
17.
貪欲のアルゴリズム? • (1)流せる余地のある辺のみを使って s
から t へのパスを見つける • (2)見つかれば目一杯流して、(1)に戻る。見つからなければ終了 𝑠 𝑢2 𝑢1 𝑢3 8 2 10 6 t 5 3 6
18.
貪欲のアルゴリズム? • (1)流せる余地のある辺のみを使って s
から t へのパスを見つける • (2)見つかれば目一杯流して、(1)に戻る。見つからなければ終了 𝑠 𝑢2 𝑢1 𝑢3 8 2 5/10 5/6 t 5/5 3 6
19.
貪欲のアルゴリズム? • (1)流せる余地のある辺のみを使って s
から t へのパスを見つける • (2)見つかれば目一杯流して、(1)に戻る。見つからなければ終了 𝑠 𝑢2 𝑢1 𝑢3 8 2 5/10 5/6 t 5/5 3 6
20.
貪欲のアルゴリズム? • (1)流せる余地のある辺のみを使って s
から t へのパスを見つける • (2)見つかれば目一杯流して、(1)に戻る。見つからなければ終了 𝑠 𝑢2 𝑢1 𝑢3 5/8 2 10/10 5/6 t 5/5 3 5/6
21.
貪欲のアルゴリズム? • (1)流せる余地のある辺のみを使って s
から t へのパスを見つける • (2)見つかれば目一杯流して、(1)に戻る。見つからなければ終了 𝑠 𝑢2 𝑢1 𝑢3 5/8 2 10/10 5/6 t 5/5 3 5/6 終了! 答えは10!
22.
貪欲のアルゴリズム? • (1)流せる余地のある辺のみを使って s
から t へのパスを見つける • (2)見つかれば目一杯流して、(1)に戻る。見つからなければ終了 𝑠 𝑢2 𝑢1 𝑢3 5/8 2 10/10 5/6 t 5/5 3 5/6 でも、 本当は?
23.
貪欲のアルゴリズム? • (1)流せる余地のある辺のみを使って s
から t へのパスを見つける • (2)見つかれば目一杯流して、(1)に戻る。見つからなければ終了 𝑠 𝑢2 𝑢1 𝑢3 6/8 1/2 10/10 4/6 t 5/5 3 6/6 正しい答え 11!
24.
貪欲のアルゴリズム? • 両者の流量の差に着目してみる 𝑠 𝑢2 𝑢1 𝑢3 +1 +1 -1 t +1
25.
貪欲のアルゴリズム? • 両者の流量の差に着目してみる。 • -1
はそれまでのフローを押し戻す操作に相等する。 𝑠 𝑢2 𝑢1 𝑢3 +1 +1 -1 t +1
26.
貪欲のアルゴリズム? • 両者の流量の差に着目してみる。 • -1
はそれまでのフローを押し戻す操作に相当する。 • 流れている流量分だけ逆辺を追加して、フローを押し戻せるようにす る。 𝑠 𝑢2 𝑢1 𝑢3 +1 +1 -1 t +1
27.
Ford-Fulkersonのアルゴリズム • (1)流す余地のある辺と、流した容量分の逆辺のみを使って、 s
から t へのパスを見つける • (2)見つかれば目一杯流して、(1)に戻る。見つからなければ終了 𝑠 𝑢2 𝑢1 𝑢3 8 2 10 6 t 5 3 6
28.
Ford-Fulkersonのアルゴリズム • (1)流す余地のある辺と、流した容量分の逆辺のみを使って、 s から
t へのパスを見つける • (2)見つかれば目一杯流して、(1)に戻る。見つからなければ終了 𝑠 𝑢2 𝑢1 𝑢3 5/8 2 10/10 5/6 t 5/5 3 5/6 この状態から
29.
Ford-Fulkersonのアルゴリズム • (1)流す余地のある辺と、流した容量分の逆辺のみを使って、 s
から t へのパスを見つける • (2)見つかれば目一杯流して、(1)に戻る。見つからなければ終了 𝑠 𝑢2 𝑢1 𝑢3 5/8 2 10/10 5/6 t 5/5 3 5/6 流れている分だけ 逆辺をはり10 5 5 5 5
30.
Ford-Fulkersonのアルゴリズム • (1)流す余地のある辺と、流した容量分の逆辺のみを使って、 s
から t へのパスを見つける • (2)見つかれば目一杯流して、(1)に戻る。見つからなければ終了 𝑠 𝑢2 𝑢1 𝑢3 5/8 2 10/10 5/6 t 5/5 3 5/6 パスを見つける! 10 5 5 5 5
31.
Ford-Fulkersonのアルゴリズム • (1)流す余地のある辺と、流した容量分の逆辺のみを使って、 s
から t へのパスを見つける • (2)見つかれば目一杯流して、(1)に戻る。見つからなければ終了 𝑠 𝑢2 𝑢1 𝑢3 6/8 1/2 10/10 4/6 t 5/5 3 6/6 10 4 5 5 5
32.
Ford-Fulkersonのアルゴリズム • (1)流す余地のある辺と、流した容量分の逆辺のみを使って、 s
から t へのパスを見つける • (2)見つかれば目一杯流して、(1)に戻る。見つからなければ終了 𝑠 𝑢2 𝑢1 𝑢3 6/8 1/2 10/10 4/6 t 5/5 3 6/6 10 4 6 5 5 1 逆辺を張りなおしても、 パスが見つからない
33.
Ford-Fulkersonのアルゴリズム • (1)流す余地のある辺と、流した容量分の逆辺のみを使って、 s
から t へのパスを見つける • (2)見つかれば目一杯流して、(1)に戻る。見つからなければ終了 𝑠 𝑢2 𝑢1 𝑢3 6/8 1/2 10/10 4/6 t 5/5 3 6/6 10 4 6 5 5 1 逆辺含めたグラフを 残余グラフという
34.
Ford-Fulkersonのアルゴリズム • アルゴリズムの正当性は後程 • パスを見つけては更新の繰り返し •
DFS でパスを見つける • 最大フローの流量を F とすると高々 F 回 DFS が行われる • 最悪計算量は 𝑂 𝐹 𝐸 + 𝑉
35.
カットとは [定義] 頂点集合の任意の分割 S, V
∖ 𝑆 を考える。 S から V ∖ 𝑆 に出ていく辺の集合をカットと言い、 S, V ∖ 𝑆 と表す。 特に、s ∈ 𝑆 , t ∈ 𝑉 ∖ 𝑆のとき𝑠 − 𝑡 カットという s-t カットに含まれる辺全てを削除すると、 𝑠 − 𝑡パスがなくなる カットに含まれる辺の容量の総和をカットの容量という 最小カットとは、任意の 𝑠 − 𝑡 カットのうち、カットの容量が最小のもの
36.
カットとは C = {
𝑢1, 𝑢4 , 𝑢2, 𝑢4 , 𝑢2, 𝑢5 , 𝑢3, 𝑢5 } はカット? はい。 カットの容量は? 8です。 𝑠 𝑢1 𝑢3 𝑢2 𝑢5 𝑢4 𝑡 1 4 3 4 2 1 1 2 4 2 1
37.
カットとは C = {
𝑠, 𝑢1 , 𝑠, 𝑢2 𝑠, 𝑢3 } はカット? はい。 カットの容量は? 8です。 𝑠 𝑢1 𝑢3 𝑢2 𝑢5 𝑢4 𝑡 1 4 3 4 2 1 1 2 4 2 1
38.
カットとは C = 𝑢1,
𝑢4 , 𝑢4, 𝑢5 𝑢5, 𝑡 はカット? いいえ。 𝑠 𝑢1 𝑢3 𝑢2 𝑢5 𝑢4 𝑡 1 4 3 4 2 1 1 2 4 2 1
39.
カットとは C = {
𝑠, 𝑢1 , 𝑠, 𝑢2 𝑢3, 𝑢5 } はカット? はい。 カットの容量は? 5です。 𝑠 𝑢1 𝑢3 𝑢2 𝑢5 𝑢4 𝑡 1 4 3 4 2 1 1 2 4 2 1
40.
最大フロー・最小カットの定理 [定理] 任意のネットワークにおいて、最大フローの値は、最小カットの容量に 等しい 𝑠 𝑢1 𝑢3 𝑢2 𝑢5 𝑢4 𝑡 1/1 1/4 3/3 1/4 2/2 1/1 1/1 2 3/4 2/2 1/1
41.
証明 • 証明したいことは二つ • Ford-Fulkerson
のアルゴリズムの正当性 • 最大フロー・最小カットの定理
42.
証明 [証明の流れ] 1) 任意のフロー f
の流量 ≤ 最小カットの容量 2) Ford-Fulkerson で得られたフロー f’の流量 = 最小カットの容量 この二つを示すことができれば、 f’ が最大フローであり、同時に最大フロー・最小カットの定理を示せる。
43.
任意のフロー f の流量
≤ 最小カットの容量 任意のフロー 𝑓と任意のカット (S, V∖S) を考える (𝑓の流量) = 𝑒 ∈ 𝛿+ (𝑠) 𝑓(𝑒) であり、 𝑣 ∈ 𝑆 ∖ 𝑠 に対して 𝑒 ∈ 𝛿−(𝑣) 𝑓(𝑒) = 𝑒 ∈ 𝛿+(𝑣) 𝑓(𝑒)であるので (𝑓の流量) = (Sから出ていく辺の流量) – (Sに入ってくる辺の容量) ≤ (カットの容量) 𝑠 𝑢2 𝑢1 𝑢3 𝑓(𝑒1) t 𝑓(𝑒2) 𝑓(𝑒4) 𝑓(𝑒3) 𝑓(𝑒5) 𝑓(𝑒7) 𝑓(𝑒6)
44.
f’の流量 = 最小カットの容量 f’
に対する残余グラフにおいて、 s-vパスの存在するような頂点 v からなる集合を S とする。 f’ の残余グラフにおいてs-tパスが存在しないので、(S, V∖S)は s-t カットとなる。 また, S の性質より S から V ∖ Sに向かう辺 e について f’(e) = c(e) V ∖ S から S に向かう辺 e について f’(e) = 0 したがって (f’の流量) = (Sから出る辺の流量) - (Sに入る辺の流量) = (カットの容量) 𝑠 𝑢2 𝑢1 𝑢3 6/8 1/2 10/10 4/6 t 5/5 3 6/6 10 4 6 5 5 1
45.
実装例(C++)
46.
目次 • 最大フロー、最小カットのお話 • 競プロのお話
47.
競プロの話 • フローのアルゴリズムは複雑なので、ライブラリ化するのがおすすめ • 最大流を計算するクラスを用意 •
メンバ関数は以下の二つ - add_edge(int from, int to, int cap) := 辺を追加する - max_flow(int s, int t) := s から t への最大フロー値を求める
48.
競プロの話 ブラックボックス
49.
身も蓋もない話 • 最大流問題を解くアルゴリズムはFord-Fulkerson法のほかに Dinic法 が知られている。 •
Dinic法のオーダーはO(E V^2) だが、実際には爆速に動く • こっちを使っているひとが多いように感じる
50.
問題の解き方 • 考察する • あ、これフローっぽいな
or カットっぽいな • グラフをいい感じに作る • ライブラリをペタリ •AC
51.
問題(KUPC2014 H) https://qupc2014.contest.atcoder.jp/tasks/qupc2014_h [問題概要] M 頂点
N 辺 の重みつき有向グラフと整数 P、さらに頂点番号 𝐿0, 𝐿1, … 𝐿 𝐺−1 が与 えられる。各頂点には魔法使いが一人づつ存在し、𝐿𝑖 (0 ≤ 𝑖 ≤ 𝐺 − 1) にいる魔 法使いは無制限に魔力を得ることができる。各辺の重みを超えないようにうまく魔 力を伝達した時に、頂点 0 に P 以上の魔力を送ることができるかどうかを答えよ [制約] 1 ≤ 𝑁 ≤ 500 1 ≤ 𝑀 ≤ 500
52.
考察 最大フローを求める問題に帰着できそう 頂点が複数設定される。どう処理するか? 4 32 0 1 200 50 100 100 入力例3 4 5 100
2 3 4 1 0 200 2 1 50 3 2 100 4 2 100
53.
考察 図のように架空の s 頂点を追加して… 4 32 0 1 200 50 100 100 S 入力例3 4
5 100 2 3 4 1 0 200 2 1 50 3 2 100 4 2 100
54.
考察 図のように架空の s 頂点を追加して… 容量
INF の辺を張り… 4 32 0 1 200 50 100 100 S 入力例3 4 5 100 2 3 4 1 0 200 2 1 50 3 2 100 4 2 100 INF INF
55.
考察 図のように架空の s 頂点を追加して… 容量
INF の辺を張り… 最大フローを流せばよい! 4 32 0 1 50/200 50/50 0/100 50/100 S 入力例3 4 5 100 2 3 4 1 0 200 2 1 50 3 2 100 4 2 100 50/INF 0/INF
56.
実装例 (C++)
57.
問題 (ABC010 D) https://beta.atcoder.jp/contests/abc010/tasks/abc010_4 [問題概要] SNS
の友人関係を表す無向グラフが与えられる。 なぎさちゃんは高橋君に自分以外の女と連絡を取ってほしくない。 なぎさちゃんは以下のような工作ができる。 - 友人関係を一つ解消 - 一人のパスワードを変更し、メッセージを閲覧不可能にする なぎさちゃんが工作を行う回数の最小値を出力してください [制約] 1 ≤ 𝑉 ≤ 100
58.
考察 • このような図で考えてみる 高 女 女 女
59.
考察 • 最適解は 2 高 女 女 女
60.
考察 • 工作のパターンが二種類あるのが面倒 高 女 女 女
61.
考察 • 図のように架空の頂点を追加すると、辺の削除だけを考えることが できる 高 女 t s 女 女 女
62.
考察 • 最小カットに帰着できた!! 高 女 t s 女 女 女
63.
考察 • 別の例 高 女 女 女
64.
考察 • グラフをちょっと移動 高 女 女 女
65.
考察 架空の頂点に辺を張る 高 女 女 女 女
66.
考察 最小カット!! 高 女 女 女 女
67.
実装例(C++) • s ノードと
t ノードに何番を割り振るかを • 定義してしまう。 • s := 0, t := n
68.
問題 (ACPC 2018
I) https://onlinejudge.u-aizu.ac.jp/beta/room.html#ACPC2018Day2/problems/I [問題] 文字列のリストが与えられ、しりとりを以下のルールで行う。 1) まず最初に、リストの中から好きな文字列を一つ選び、その文字列をリストから 除外する。 2) 続いて、一つ前に選んだ文字列の最後の一文字が、最初の一文字である文字 列をリストから一つ選ぶ。 3) 選んだ文字列をリストから除外する。 この後、2., 3.を交互に繰り返すことになる。 さて、このしりとりを2.でリストから選べる文字列がなくなるまで続けたとしよう。 こ のときに、最後に選んだ文字列の「最後の一文字」としてあり得る文字をすべて列 挙したい。
69.
問題 (ACPC 2018
I) https://onlinejudge.u-aizu.ac.jp/beta/room.html#ACPC2018Day2/problems/I [制約] 1 ≤ 𝑁 ≤ 104 1 ≤ 𝑠𝑖 ≤ 100
70.
考察 [入力] 7 she sells sea shells by the seashore 与えられた入力をグラフにしてみる(自己ループは無視) S e at b y
71.
考察 [入力] 7 she sells sea shells by the seashore 与えられた入力をグラフにしてみる(自己ループは無視) S e at b y
72.
考察 • 各文字 (a
– z) に対してしりとりの最後になりうるかを判定したい • 入次数と出次数に着目?
73.
考察 • 各文字 (a
– z) に対してしりとりの最後になりうるかを判定したい • 入次数と出次数に着目? (入次数) < (出次数)のとき NG! c
74.
考察 • 各文字 (a
– z) に対してしりとりの最後になりうるかを判定したい • 入次数と出次数に着目? (入次数) ≥ (出次数)のとき OK? c
75.
考察 • 各文字 (a
– z) に対してしりとりの最後になりうるかを判定したい • 入次数と出次数に着目? (入次数) ≥ (出次数)のとき OK? 戻ってこれなかったらダメ c
76.
考察 • 各文字 (a
– z) に対してしりとりの最後になりうるかを判定したい 下の図のように頂点を分解して s から t への辺素なパスが出次数と同じになればOK! 辺素なパスの本数は容量 1 のグラフにおけるフロー値! t s
77.
実装例(C++)
78.
問題(ICPC 国内予選 2009
E) http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=1163&lang=jp [問題概要] 青いカードが m 枚、赤いカードが n 枚あり、それぞれに1 ≤ 𝑥 ≤ 107 の整数が書かれている。赤のカードと青のカードから互いに素でない ペアを選んで取り除く操作を行う。適切に操作を行った時、最大何組 のペアが取り除かれるか? [制約] 1 ≤ 𝑚, 𝑛 ≤ 500
79.
考察 引用 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=1163&lang=jp
80.
考察 • 最初に青の 2
と赤の 2 を取り除く
81.
考察
82.
考察 • 次に青の 6
と赤の 3 を取り除く
83.
考察
84.
考察 • 最後に青の 15
と 赤の 35 を取り除く
85.
考察 • 答えは 3
!!
86.
貪欲法? 取り除けるペアを見つけて、貪欲に取り除く
87.
貪欲法? 例えば以下のようなとき、貪欲法ではだめなことがわかる。 Blue 2 3 Red
6 4
88.
考察 • グラフに落とし込んで考察
89.
考察 • 前処理で互いに素な頂点間に辺を張る
90.
考察 • 作れるペアの最大値を求める問題 =
最大マッチング!!
91.
考察 • 二部グラフの最大マッチングはフローを流すことで解けることが知ら れている。(証明は後で)
92.
アルゴリズム 架空の頂点 s t
を追加 s t
93.
アルゴリズム 図のように 有向辺を張る 辺の 容量は1 s t
94.
アルゴリズム s から t
への最大フローが 最大マッチング になる! s t
95.
証明 • 復習 (最大マッチング) マッチングが最大である
増加パスを持たない フローによって得られたマッチングが増加パスを持たないことを示せ ばよい 増加パスを持つことを仮定して矛盾を導く (背理法)
96.
証明 増加パスを持つと仮定する。 以下の二つの部分構造のどちらかを持つ。 …
97.
証明 増加パスを持つと仮定する。 以下の二つの部分構造のどちらかを持つ。 c c …
98.
証明 • このマッチングを得るフローを考える c c …
99.
証明 • このマッチングを得るフローを考える • 増加パス上の辺を反転させるようなフローを構成でき、フロー値を大 きくできる。 c c …
100.
証明 • 最大フローであることに矛盾! c c …
101.
ソースコード (C++) • •
102.
練習問題
Download