AtCoder Beginner Contest 235 E 問題 MST+1
問題
提出解答
問題の概要
重み付き連結無向グラフ が与えられる. ただし,
である.
以下の質問に 回答えよ.
- とする. 以下で構成される重み付き無向グラフ の最小全域木に辺 は含まれているか? ただし,
とする.
ここで, 以下のことが証明できる.
互いに辺の重みが異なる重み付き連結無向グラフにおいて, 最小全域木は一意に存在する.
制約
- は連結
- の辺の重みは全て異なる.
- の辺の重みは にあるどの辺の重みとも異なる.
解法
グラフ の最小全域木を とする. ここで, に含まれない辺については についても最小全域木に含まれることは無いので, 取り除いても構わない.
よって, 問題は の最小全域木に が含まれるか? という問題になる.
ここで, は木なので, はちょうど つのサイクルを持つ連結グラフ (通称: なもりグラフ) になる しかも, そのサイクルは辺 と Path をあわせたものになる. また, なもりグラフにおいて, 全域木から取り除かれるのはただ 辺であり, その辺はサイクルを成す辺である.
そして, 最小性を保つためには, そのサイクルを成す辺のうち, 重みが最大であるような辺を取り除くべきである. よって, 各問題は以下を解くことになる.
において, Path を構成する辺の重みの 最大値 を とする. このとき, であるか?
よって, Kruskal によって, 以下のアルゴリズムによって, について解くことができる.
そして, 以下は同値である.
- において, 重みが 未満の辺だけを残したグラフ において, は非連結である.
以上から, 以下のようなアルゴリズムを用いて, 問をまとめて処理できる.
- 空グラフ を用意する.
- の辺を とする.
- について, 辺の重みが小さい順に以下を行う. ただし, 操作の対象の辺を とする.
- となる が存在する場合, に辺 を加える.
- となる が存在する場合, において, が非連結ならば, 問目は肯定的であり, 連結ならば否定的である.
ここで, についての操作は Union-Find の union, same が得意とする. また, このアルゴリズムにおいて, を に制限する必要はない. このことから, 計算量 で 問まとめて処理できる.