Union Find
問題
ある大陸にはいくつかの島があり、いくつかの橋でつながっています。この橋を使うと、ある島から別の島に移動できます。すべての島について、それぞれがどのグループ(つながり)に属するかを調べ、最終的なグループの数を出力してください
code:入力
N M
a b
最初の行に、島の数 N と橋の数 M が与えられます。
次の M 行には、橋で直接つながっている2つの島 a, b が与えられます。
code:出力
x
島のグループの数(連結成分の数)。
制約
$ 1 \leq N \leq 10^5
$ 0 \leq M \leq 10^5
$ 1 \leq a, b \leq N
UnionFindをどう扱うか?
1. 初期状態:
各島はそれぞれ独立したグループに属している(親は自分自身)。
2. Union操作:
橋でつながっている島同士を同じグループに結合。
3. Find操作(経路圧縮):
グループの代表を効率的に特定し、データ構造を最適化。
4. グループの数を数える:
各島の「親」を確認し、ユニークな親の数をグループ数とする。