AtCoder Beginner Contest 229 E 問題 Graph Destruction
問題
提出解答
問題の概要
とする. グラフ
に対して,
に対して, 以下を求めよ.
の連結成分の個数
制約
- 入力は全て整数
解法
一般的に, 「消す」という操作よりも, 「入れる」という操作の方が簡単である場合が多い. また, この問題を解くにあたって, の順に解く必要がないことから,
の順に解くことにする.
とする. このとき,
の間には以下のような関係がある.
のグラフに, 頂点
と,
である全ての
に対して, 辺
を加えると,
になる *1.
この関係から, の連結成分の個数を
としたとき, 以下のようにして,
を求めることができる.
である (
頂点からなるグラフの連結成分の数は
である).
の順に以下を実行する.
-
とする (
に孤立している頂点
を加える).
-
である全ての
に対して, 頂点
と頂点
が非連結ならば, この辺を加え,
から
を引く (非連結な頂点同士辺を結ぶと, 連結成分の数は
減る).
-
グラフに辺を加える, および2頂点が非連結かどうかをみることを得意とするデータ構造は Union Find である.
よって, 計算量 で求めることができた.
*1: という制約に注意