Arc 010 d
- 5. 例1
Sample Input :仲間
3
11
12
21
0
Sample Output
1
例えば1番目の人に伝えれば3人全員に伝えられる
- 6. 例2
Sample Input
:仲間
2
:スパイ
11
12
1
21
Sample Output
1
1番目の人から2番目の人に伝えようとすると、絶対にスパイに
も伝わってしまうので無理
2番目の人に伝えれば2人に伝えられる
- 7. 例3
Sample Input
:仲間
5
1 1 :スパイ
1 2
2 3
3 3
5 3
2
2 1
4 4
Sample Output
2
3番目の人から始めると2,4番目の人に伝えられ、2番目の人から更
に1番目の人へと伝えられる。その後、別に5番の人に伝える
- 11. DFSと被覆
頂点Xを始点とするDFSで辿り着けたところ=被覆
2を始点とすると2,4,7,9に行ける
2は2,4,7,9を被覆している
10を始点とすると3,8,10に行ける
1
10は3,8,10を被覆している
10
2
8
4 9 3
5
7 6
- 12. 集合被覆の例
始点 被覆 始点 被覆
1 1,2,4,7,9 1 1,2,4,7,9
2 2,4,7,9 2 2,4,7,9
1 3 3 3 3
10
4 2,4,7,9 4 2,4,7,9
2
5 3,5 5 3,5
8
4 3 6 3,5,6 6 3,5,6
9
7 7 7 7
5 8 3,8,10 8 3,8,10
7 6 9 2,4,7,9 9 2,4,7,9
10 3,8,10 10 3,8,10
1,6,10に伝えれば
最小被覆可能
- 17. 強連結成分分解
グラフSにおいて、Sの任意の頂点からSの他の任意の頂点へ到達
可能なとき、Sは強連結であるという
グラフGの部分グラフSが極大な強連結であるとき、Sを強連結成
分(SCC: Strongly Connected Component) という
強連結成分分解とは、強連結成分を1つの頂点に潰してしまうこ
とをいう
強連結成分分解後のグラフは必ずDAG(閉路がない有向グラフ)になる
強連結成分分解は、DFSを2回(以上)行うことで実現できる
1回目のDFSで帰りがけ順に番号付けする
2回目のDFSでは辺の向きを逆にし、大きい番号の頂点からDFS
到達できたところは強連結成分、まだ到達してない頂点があれば、そ
のうち最も大きな番号の頂点からまたDFS、を繰り返す
- 18. 強連結成分分解の様子と解
1 1
10 8,
10
2
8 2,4
,9
4 9 3 3
5 5
7 6 7 6
:始点
:その他の点
- 20. 元ネタ
元はリア充を爆発させる問題だった
リア充を爆発させたいが、手は汚したくないのでどんどん巻き込まれ
て爆発すればいい、けど非リアの同志は爆発させたくない、みたいな
最初は1人爆発させたときに爆破できる最高人数の予定だった
n人全員を始点にしてDFSやるだけ(C問題相当)
でもやっぱりリア充は全員駆逐すべきだと思ったので最小何人爆
発させればよいかに変えたらそこそこ難しくなったのでDに変更
でもちょっと難易度不足を感じたのでkd木による実装量かさまし
(ホントはいい感じのkd木ライブラリ欲しかっただk…げふんげふん)
虚しくなったさすがに物騒なのでそれっぽい感じの話に変えた