CSES(Competitive Programmer's Handbook)の「Distinct Colors」問題は、与えられたノードとエッジからなるグラフに対して、各ノードに異なる色を割り当てる方法の数を求める問題です。
この問題にはいくつかの解法がありますが、以下にいくつかの方法を紹介します。
-
パーミュテーションを使用する方法:
- グラフのノードの数を N とします。
- N 個の色の選び方を考えます。最初のノードには N 個の色のうちどれかを割り当てます。
- 次のノードには N-1 個の色のうちどれかを割り当てます。
- このようにして、すべてのノードに色を割り当てるまで続けます。
- この方法では、N!(N の階乗)通りの色の割り当て方法が得られます。
-
再帰を使用する方法:
- グラフのノードを深さ優先探索(DFS)で訪れます。
- 訪れたノードにまだ色が割り当てられていない場合、利用可能な色のうち一つを割り当てます。
- 再帰的に隣接するノードを訪れ、同じ手順を繰り返します。
- この方法では、すべてのノードに色を割り当てる方法の数を数えることができます。
これらの解法は一部ですが、参考になるかと思います。詳細なコード例や実装のポイントについては、CSES の公式サイトやアルゴリズムの参考書を参照してください。