No.1878 union-find の数え上げ
レベル : / 実行時間制限 : 1ケース 2.000秒 / メモリ制限
: 512 MB / 標準ジャッジ問題
タグ : / 解いたユーザー数 42
作問者 :
37zigen
/ テスター :
tko919
cologne
タグ : / 解いたユーザー数 42
作問者 :

問題文最終更新日: 2022-03-18 21:50:27
概略
何らかの操作によってできた union-find を表す根付き木
この union-find には経路圧縮が実装されていませんでしたが、経路圧縮が実装されていた場合にあり得た union-find の木
つまり
- 経路圧縮がないとき、根付き木
- 経路圧縮があるとき、根付き木
問題
木
この木は、それぞれ頂点
- union(a, b)
- 根
と根 を辺で接続して、 を の親とする。
- 根
- root(a)
- 頂点
の先祖を辿り、見つけた根を返す。
- 頂点
経路圧縮ありだと、root のアルゴリズムは
- root(a)
- 頂点
の先祖を辿り、見つけた根を返す。その際、根を除く の先祖( 自身を含む)の親を根に変更する。
- 頂点
経路圧縮があった場合にあり得た木の個数を
入力
- 入力中の値は全て整数である。
- 入力が表すグラフは木である。
出力
最後に改行してください。
サンプル
サンプル1
入力
1
出力
1
サンプル2
入力
4 1 2 2
出力
4
経路圧縮が実装されている場合、union(2, 3), union(2, 4), union(1, 2) によって木
- 何もしないと左から一つ目の木に、
- root(3) を行うと左から二つ目の木に、
- root(4) を行うと左から三つ目の木に、
- root(3) と root(4) を行うと左から四つ目の木になります。
提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。