AtCoder Library (ACL)

AtCoder Library (ACL) は AtCoder が公開しているC++用のライブラリです。ABC のC問題ぐらいまではC++の標準ライブラリでほとんど対応できますが、それ以上のレベルになると(C問題でも時々は)ACL を使用することで劇的に速く簡単に解くことができる場合があります。

ここにライブラリと、そのドキュメント(document_ja フォルダの下)があります。

GitHub - atcoder/ac-library: AtCoder Library
AtCoder Library. Contribute to atcoder/ac-library development by creating an account on GitHub.

 

インストール

AtCoder のサイトの実行環境には ACL は既に組み込まれているので何もする必要ありませんが、パソコンのローカル環境で ACL を動かすにはインストール作業が必要です。以下の説明は Apple Silicon Mac のターミナル、または WIndows WSL でローカル実行環境を整備している場合を想定しています。コンパイラは gcc です。

ACL をインストールするためのディレクトリを作成し(ここでは “ACL” という名前にした)、その中に GitHub からクローンします。

インストールした場所に Path を通します。Mac の場合は ~/.zshrc に、Windows WSL の場合は ~/.bashrc または ~/.cshrc に1行追加します。コマンド内に書くパスは自分の環境に合わせてください。追加する場所はファイルの末尾付近で良いでしょう。

Path を通したらターミナルを再起動します。VSCode のターミナルを使っているなら VSCode を再起動してください。

例えば、ソースコードに

と追加してコンパイルしてみてください。正しく Path が通っていればエラーなくインクルードできるはずです。

 

UnionFind

ACL にはいろいろなクラス・関数が含まれますが、一例として UnionFind を使ってみましょう。UnionFind は DSU(Disjoint Set Union、素集合データ構造)のことですが、競プロの解説などでは「UnionFind」と呼ぶことが多いです。根付き木を使ってグループ分けを効率的に管理するデータ構造です。問題文に「連結成分」というような言葉が出てきたら UnionFind を思い出してください。

実際のクラス・メソッドはこのようになっています。

ac-library/document_ja/dsu.md at master · atcoder/ac-library
AtCoder Library. Contribute to atcoder/ac-library development by creating an account on GitHub.

UnionFind のアルゴリズム解説は次のページのスライドショーが非常にわかりやすいです。例題もあるので解いてみてください。

B - Union Find
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.

別の例題をいくつか解くと理解が深まります。グラフを使っても解けるので、UnionFind を使った場合と比べてみることをおすすめします。

https://atcoder.jp/contests/abc284/tasks/abc284_c
https://atcoder.jp/contests/abc288/tasks/abc288_c

 

Python

調べた限りでは AtCoder は Python 版の UnionFind を出していないようですが、ネット検索すると Python でライブラリ化した実装例がたくさん見つかります。適当なものを選んでテンプレート化しておくと良いです。クラス名やメソッド名は AtCoder の UnionFind に合わせたものを使えば解説を見たときに混乱することも少ないでしょう。

例)

GitHub - shakayami/ACL-for-python
Contribute to shakayami/ACL-for-python development by creating an account on GitHub.
【DSU編】AtCoder Library 解読 〜Pythonでの実装まで〜 - Qiita
0. はじめに2020年9月7日にAtCoder公式のアルゴリズム集 AtCoder Library (ACL)が公開されました。私はACLに収録されているアルゴリズム、データ構造のほとんどが初…