Mitsubachiのメモ

組合せ論をしています

Div1 バチャ日記4 - Codeforces Round #599

Cで大変なことになってしまった...

codeforces.com

f:id:Mitsubachi88:20220127160514p:plain

AB2完。Cは終了後にAC。

 

A - Tile Painting

最後の TCB で似た設定を見た。素因数を 2 つ以上持つなら上手く 1 からその素因数を足し引きすることで全部の index を覆えるので答えは 1 で、 1 つならそれを p として \mathrm{mod} \ p で考えれて答えは p になる。

 

B - 0-1 MST

これ面白い。最初頂点を半分ずつ分けて再帰する形かと思ったが、 3 頂点のコスト 1 の辺からなる完全グラフの各頂点にコスト 0 を伸ばしたもう 1 個の頂点をつけたので 0 ではなく 1 になるので嘘だった。

大人しく 1 を取り除いたものの連結成分数を考えると、愚直に縮約しても計算量がそこまで大きくならないことに気づく。 priority_queue を使って実装したが、使わなくても良かったかもしれない。

 

C - Sum Balance

サイクルを見つけて再帰する形にして実装してたが、同じサイクルを複数回舐めるハメになるのでこれでは TLE になってしまう。そこで O(3^N) の DP を考えて、先に頂点集合ごとにサイクルがあれば 1 つ見つけてあげるという実装にした。同一サイクルを 2 回以上辿っていそうなら強制終了するのを組んだが WA が取れないので TLE 覚悟で外したら通った。なんでやねん。

N \leq 15O(3^N) が頭によぎらないの、かなりダメだった。