Official

I - Odd Even Partition Editorial by harurun4635 Editorial for printing

部分点解法

? の個数を \(Q\) とします。

\(O(2^QN^2)\) 解法( TLE 想定)

? について X と Y の決め方 \(2^Q\) 通りをすべてためします。これを決めれば「各頂点について隣接する頂点がどちらに属するかをすべて確認する」といった愚直な判定が \(O(N^2)\) できます。よって全体で \(O(2^QN^2)\) となります。

\(O(2^QQN)\) 解法

定数倍が良ければこの解法も許容しますが、おそらく少し定数倍が厳しいです。

「辺 \((u, v)\) であって、\(S_u, S_v\) ともに ? ではないもの」については先に計算しておけるはずです。ですからこれをすべて先に計算しておくと、残る辺は \(O(QN)\) 本です。各決め方についてこれらの寄与を確かめれば \(O(2^QQN)\) です。

\(O(2^QN)\) 解法(想定部分点解法)

差分更新を考えます。上の解法ではすべての頂点について X か Y を決めたあとに「残る辺」を処理しました。しかし \(S_i =\) ? の頂点を \(1\) つ決めるたびに 「既に決まっている頂点と頂点 \(i\) を結ぶ辺」の寄与は計算できるはずです。

DFS などで途中までの計算結果を管理をしながら、逐一差分を更新することで \(O(2^QN)\) が達成されます。


余談

どの解法もうまく bitset を用いることでワードサイズの高速化が可能です。それをした解法は AC がとれると思います。

また、探索系のライブラリ(pulp など)でも AC がとれるでしょう。

posted:
last update: