[ABC398G] Not Only Tree Game
没有人类了,这个题是怎么做到 20 min 场切的???。
题意
两个人在无向图上加边,要保证新加的边不会形成奇环,谁加不了谁输了,求先手还是后手赢。
sol
当 \(n\) 为奇数的时候,最终的二分图一定只会有偶数条边,判个 \(m\) 的奇偶就做完了。
现在要判的就是 \(n\) 为偶数的情况了。
先定义一下:
\(ee\) 为两边都是偶数的二分图的数量。
\(eo\) 为一边是偶数一边是奇数的二分图的数量。
\(oo\) 为两边都是奇数的二分图的数量。
\(iso\) 为没人理的孤点的数量。
\(x\) 表示所有连通块当前还能加入的边数。
显然在 \(x=iso=0\) 的时候就是必败状态,所以我们要尽量丢给对手 \(iso/2+x\) 为偶数的情况。
下面就是大坨关于 \(n\) 为偶数的各种分类讨论了。
没有 \(eo\) 的情况
那么现在我们 \(iso\) 的数量必定是偶数。
当前我们有如下的几种操作可以做:
连一条联通块的边,这个必定会使 \(iso/2+x\) 的奇偶性改变。
把两个孤点连起来,这个也必定会使 \(iso/2+x\) 的奇偶性改变。
把一个孤点给加入到 \(ee\) 或者 \(oo\) 里,但这样一定不优。
因为如果我这样干的话就会出现 \(eo\) 的情况,并且现在奇偶性完全是对面决定的了,对手可以选择再把一个 \(iso\) 加到 \(e\) 那边变换奇偶性,也可以选择加到 \(o\) 那边不变奇偶性,这就导致我一定会拿到 \(iso/2+x\) 为偶数的情况。
最后的情况是合并两个连通块,手玩一下发现怎么做都会影响图的奇偶性。
所以这种情况就是 \(iso/2+x\) 为奇数先手必胜,反之为偶数。
\(eo=1\) 的情况。
\(iso\) 必定是奇数。
你发现你可以随便给 \(eo\) 一个 \(iso\) 就可以转化成上面的情况,所以先手必胜。
\(eo=2\) 的情况。
跟上面一样,你直接合并这两个 \(eo\) 也是可以操作 \(iso/2+x\) 的奇偶性的,先手必胜。
\(eo>2\)
双方肯定不会把 \(eo\) 给合并到 \(\leq 2\),因为这样相当于送别人赢了。
所以肯定会合成成 \(eo=3\) 然后只有这个能操作,这就相当于转化成了 \(n\) 为奇数的情况,又是判奇偶性了。
模拟就行了。