今回からRating対象が2000↑、5問体制となったAGC。
とりあえず今後もRatedで迎えたいね。
いくつか例を考える。
①連結成分が3つ以上に分かれていると、そこから1点ずつ3点取ってきた X が確実にアウト。
②連結成分が2つの場合、双方ともクリークであったらOK。
どのように X を取っても、当然、半数以上の頂点はどちらかの連結成分に属する。
クリークの誘導部分グラフもクリークなので、多い方の連結成分由来の頂点がクリークをなす。
③逆に片方でもクリークでない場合、「同一連結成分で辺が無い頂点対 + もう片方の連結成分から1点」のような3点からなる X がアウト。
④連結成分が1つの場合、全体を2つのクリークに分けられるなら、②と同じ理由でOK。
与えられたグラフが2つのクリークに分けられるかどうかの判定は 過去に類題があり、「補グラフが二部グラフなら可能」となる。
残る場合分け「⑤連結成分が1つで、2つのクリークに分けられないとき」を考える。
この時、補グラフに奇数長のサイクルが存在していることになる。
この奇数個の頂点を X としてみる。
補グラフ上で互いに隣り合う頂点は同時に Y(クリークをなす頂点集合)に採用できないので、 最大でもサイクル上を1個飛ばしに採用するしかないが、奇数個の場合は |X|−12 個までしか採用できず、条件を満たせない。
よって可能なのは②④のみとなり、結果的に連結成分数は関係なく、「グラフが2つのクリークに分けられること」=「補グラフが二部グラフであること」を判定すれば良いとわかる。
N≤105 なので、辺数が多すぎて実際に補グラフを作れないような入力もあり得る。
N と M の関係から不可能と分かる入力は補グラフを作る前に判定する必要がある。
2つのクリークを作るのに必要な最小辺数は、頂点集合が均等に N2 ずつに分かれるときに最も少なくなる。
N が奇数の場合は1ずれるが、だいたい N2(N2−1) が辺数の最小値となる。
よって、M がこれ未満の場合は不可能。
この時、M≤106 の制約から、可能な入力はおよそ N≤2000 が満たされるので、 このサイズなら補グラフを作ることも可能となる。