ARC105 - E Keep Graph Disconnected

ARC105-Eを解いた,

問題

与えられたN頂点M辺のグラフに対して先手と後手が辺を追加していく.しかし、頂点1と頂点Nを連結にするような辺は追加できない.操作できなくなったら敗北、敗北しなかった方の勝利.
両者が最適に行動したときに勝利するのはどちらか.

解法

グラフの連結成分が二つで、頂点1を含む連結成分とNを含む連結成分がそれぞれ完全グラフである状態で手番が回ってきた人は負ける. また、最終的なグラフが定まっていればその辺数とMが勝敗が容易に判断できる.
ここでNが奇数であれば、最終的に頂点1を含む連結成分のサイズをx(1 \leq x \leq N-1)とすると、x(N-x)辺が最終的に追加されないが、これは常に奇数であることから容易にどちらの勝利か判定できる.
Nが偶数の場合は、最終的なxの偶奇によって勝敗が定まる(片方は最終的にxを偶数にしたい、もう片方はxを奇数にしたいという状況になる). 最初に頂点1と連結である頂点の数をaとして、同様にbを頂点Nについて定める.
 c:=(a \, mod \, 2) + (b \, mod \, 2)
と置き、この値によって場合分けする.
1. c=0の場合
最終的にxを偶数にしたい方の勝利(Nが偶数よりサイズが奇数の連結成分の個数は偶数個、よって相手の操作を打ち消すような操作が確実にできる).
2. c=2の場合
最終的にxを奇数にしたい方の勝利(証明は1の場合と同じ).
3. c=1の場合
先手の勝利(Nが偶数よりサイズが奇数の連結成分は奇数個、よって自分の有利な方に動かす方で1,2の場合に帰着できる).

よってUnionFindなどを用いてa,bを求めれば答えが求まる.

考察

最終状態と辺の偶奇に注目できれば自然に.

提出コード

https://atcoder.jp/contests/arc105/submissions/50079539