人工知能と競プロやってくブログ

深層学習・機械学習・AI・atcoder・競技プログラミングについて調べてやってみたことをまとめるブログです

AtCoder Beginner Contest 206(Sponsored by Panasonic) [ D - KAIBUNsyo ]をPythonでUnionFindを使って解く

ABC206でできなかった問題をやってみる。

atcoder.jp

解説

はまやんさん解説、snukeさん放送を参考に、Union Findで解くパターンでやってみる。

入力例1の数列にUnion Findをかけて木構造を作ると次のような木構造ができる。

f:id:uchidamax:20210622170111p:plain
ABC206D 入力例1

要素は2, 3, 5の3つ。
素数-1が変更する回数になるので、2回。

木構造が二つできるようなパターンもありえる。

f:id:uchidamax:20210622170246p:plain
ABC206D 木構造2つ
この場合、1, 2, 3と7, 8の二つの木ができる。
木構造が違う要素は、回文のペアにない。
ココがこの問題のUnion Findを用いるポイント。
素数3の木と、要素数2の木があるので変更する回数は
3 - 1 + 2 - 1 = 3回
となる。

実装

Union Findの実装はコピペで、ココから。

参考

blog.hamayanhamayan.com

youtu.be

note.nkmk.me