赛时没写出来,看到此题才 \(600\) 分,对自己的实力产生了怀疑,没想到是个黑题。
官方题解已经写得比较明朗,在这里再详细解释一下。
题目给出初始图不含奇闭路,因此每个连通块必定是二分图。二分图的性质使得我们在添加边时只能在两个不同的“部”之间添加,不能在同一部内添加(否则会产生奇闭路)。
对于一个连通块,设其两个部中顶点数分别为 \(a\) 和 \(b\),已存在的边数为 \(e\)。该连通块最多能形成的边数为 \(a \times b\),因此在不破坏二分性的前提下,还能添加的边数为 \(a \times b - e\)。
对整个图,我们令所有连通块中可添加的边数总和为 \(x\)。
此外,我们对连通块按两个部的顶点数的奇偶性进行分类:
- \(ee\):连通块中两侧顶点数均为偶数;
- \(oo\):两侧顶点数均为奇数;
- \(eo\):一侧为偶数,另一侧为奇数(注意非孤立的连通块中如果出现这种情况记为 \(eo\));
- \(iso\):孤立点(单个顶点构成的连通块)的个数。
游戏的终止状态是无法再添加任何边,即所有可以添加的边均已经存在。由于游戏中每次操作都会增加一条边,最终图的边数的奇偶性就决定了谁先走必胜。考虑两种情况:
1. 当 \(n\) 为奇数时
此时,无论如何将各个连通块合并,最后形成的二分图必然一侧顶点数为奇数,另一侧为偶数。所以最终图中,能够形成的边数必定为偶数。
经过分析证明,可以将最终剩余边数的情况归结为当前状态下 \(oo\) 类连通块贡献的边数(因为在 \(oo\) 类连通块中,两侧顶点数均为奇数,会对整体边数的奇偶性产生影响)和还可以添加的边数 \(x\) 的奇偶性。
综上,先手必胜当且仅当 \(\mathrm{oo} + x\) 为奇数;否则后手必胜。
2. 当 \(n\) 为偶数时
这时情况会更复杂一些,主要因为最后合并后的各个连通块中两个部的顶点数可能均为偶或者均为奇,这直接影响最终能形成的边数的奇偶性。直接分讨:
-
当 \(eo = 0\) 时:
此时所有非孤立连通块都是 \(ee\) 或 \(oo\) 类型,同时注意孤立点的个数 \(iso\) 必然为偶。分析表明,局面的胜负取决于孤立点与剩余可加边数的组合,也就是判断 \(\mathrm{iso}/2 + x\) 的奇偶性。
综上,先手必胜当且仅当 \(\mathrm{iso}/2 + x\) 为奇数;否则后手必胜。
-
当 \(1 \le \mathrm{eo} \le 2\) 时:
存在 \(eo\) 类连通块时,先手可以利用一步操作将 \(eo\) 类连通块转换为有利局面(例如连接 \(eo\) 类与孤立点或将两个 \(eo\) 类连通块合并),使得最终局面可以转化为上一种情况。
综上,先手总能找到必胜策略,因此先手获胜。
-
当 \(\mathrm{eo} \ge 3\) 时:
在每一次操作中,\(eo\) 类连通块的数目最多改变 \(2\) 个。经过多次操作后,局面可以归约到最终的状态,其胜负又可以归结为 \(\mathrm{oo} + x\) 的奇偶性。综上,先手必胜当且仅当 \(\mathrm{oo} + x\) 为奇数;否则后手获胜。
对于实现,我们只需在遍历图时利用广搜统计出每个连通块中左右两侧的顶点数、已存在的边数,从而计算出 \(x\)、以及各类连通块的数量 \(ee\)、\(oo\)、\(eo\) 与孤立点数 \(iso\)。根据 \(n\) 的奇偶性及上述分类情况判断先手是否能必胜,从而输出结果。
时间复杂度 \(O(n+m)\),可以被接受。
link