問題はこちら
問題概要
問題概要2
グラフ理論っぽく書かれていますが,同じ箱に入れてはいけないようなボールの組がいくつか与えられるので区別できる解説
重要な考え方として,複雑な問題をいきなり解くのではなく単純な問題から考えるようにするとうまくいくことがあります.今回の問題で言うと,色に塗り分ける問題をいきなり解くのではなくて赤と緑の
色に塗り分ける問題を考えます.ある頂点を赤で塗ると,その頂点と隣接する頂点は青に塗られます.これを繰り返していくと
つの連結成分につき,最初の頂点を赤に塗るか青に塗るかの
通りになります.ただし,グラフに奇閉路が存在する場合は
色に塗ることはできません.以上から,奇閉路が存在すれば
通り,存在しなければ連結成分数を
として
が答えになります.
では,色の場合を考えます.青に塗る頂点を決めれば,残りの頂点を
色に塗る問題になります.青に塗る頂点は
の全探索をすればいいです.計算量は
です.
他にもsubset convolutionを使った解があるらしい(未履修) 勉強しました
別解
結局,頂点をが答えです.ここでとは,頂点集合
が独立集合なら
そうでないなら
となる関数です.
このような畳み込みをSubsetConvolutionといい,で解けることが知られています.参考
SubsetConvolutionを知っていたらそれにしか見えませんね.
提出プログラム
https://atcoder.jp/contests/abc199/submissions/22047215 スパゲッティhttps://atcoder.jp/contests/abc199/submissions/22138032 SubsetConvolution
感想
D問題にしては難しい.考察の沼にハマると抜け出せなさそう.簡単な問題から考えるのは重要.