CSES の「Distinct Colors」問題の解法


CSES(Competitive Programmer's Handbook)の「Distinct Colors」問題は、与えられたノードとエッジからなるグラフに対して、各ノードに異なる色を割り当てる方法の数を求める問題です。

この問題にはいくつかの解法がありますが、以下にいくつかの方法を紹介します。

  1. パーミュテーションを使用する方法:

    • グラフのノードの数を N とします。
    • N 個の色の選び方を考えます。最初のノードには N 個の色のうちどれかを割り当てます。
    • 次のノードには N-1 個の色のうちどれかを割り当てます。
    • このようにして、すべてのノードに色を割り当てるまで続けます。
    • この方法では、N!(N の階乗)通りの色の割り当て方法が得られます。
  2. 再帰を使用する方法:

    • グラフのノードを深さ優先探索(DFS)で訪れます。
    • 訪れたノードにまだ色が割り当てられていない場合、利用可能な色のうち一つを割り当てます。
    • 再帰的に隣接するノードを訪れ、同じ手順を繰り返します。
    • この方法では、すべてのノードに色を割り当てる方法の数を数えることができます。

これらの解法は一部ですが、参考になるかと思います。詳細なコード例や実装のポイントについては、CSES の公式サイトやアルゴリズムの参考書を参照してください。