Codeforces Global Round 1 G. Tree-Tac-Toe 题解
题目
链接在这里。
题目大意
有一棵树上面有 n n n个结点,其中有些结点已经有了颜色(白色),有些还没有。现在有两个人,第一个人可以将任意一个没有染色过的点染色成白色,第二个人可以将任意一个没有染色过的点染色成黑色,每人轮流操作一次。当任意三个相邻结点都处于同颜色,则该颜色的人获胜(白:第一个人,黑:第二个人)。两人都绝顶聪明,请问最终谁会获胜(White,Black,Draw)。
解题方法
正解:树上博弈论。
我们分类讨论。
首先设
a
i
a_i
ai表示
i
i
i结点的度数。
我们可以发现,黑方不可胜。
我们先假设所有点都没有初始颜色。
- 当有一
a
i
a_i
ai大于等于
4
4
4,则肯定是白方胜利。举例如下:
首先染 i i i结点,然后对方一定会将一个与它相连的结点染色。接着我们再染一个相邻结点,对方即使再染一个相邻结点,但我们还有一个结点,所以白方必胜。
染色策略:
- 当有一
a
i
a_i
ai等于
3
3
3,且有至少两个相邻结点不为叶子,则白方胜利。举例如下:
我们首先染 i i i点,对方肯定会染与其相邻的结点。我们染未染色的相邻结点(非叶结点),对方肯定会染最后一个相邻结点或者是与刚才那个结点相邻的结点。 然后我们就染未染过的点就胜了。白方必胜。
染色策略:
- 当 n < 3 n<3 n<3,肯定平局,因为不足 3 3 3个。
- 如果只有
2
2
2个度数为
3
3
3的点,其他点的度数都是小于
3
3
3,且
n
n
n为奇数,白方必胜。举例如下:
我们先染 2 2 2号点,那么对方必然染 1 1 1号点(否则会输)。然后我们再染 4 4 4号点,对方必然染 3 3 3号点。然后我们再染 5 5 5号点就行了,最后一定可以获胜。白方必胜。
染色策略:
也就是当 n n n为奇数时,我们显然偶数号结点,然后对方会染奇数号,最后剩余一个结点我们将它染色,然后就会必胜。
- 考虑操作之前已有染色结点。当 n = 3 n=3 n=3,其中已染色的白点已经大于等于 2 2 2时,白方必胜;否则平局。
- 如果有一个结点操作之前为白色,我们将它拆分为四个结点。举例如下:
其中原来的点为 1 1 1,然后构造 2 ′ , 3 ′ , 4 ′ 2',3',4' 2′,3′,4′,其中我们只需存 2 ′ 2' 2′的度数,因为下面的度数不影响答案。
拆点过后,只需做一遍 1 , 2 , 4 1,2,4 1,2,4即可(见上)。
这道题目其实不难,只要用笔在草稿纸上写一下情况并分类讨论即可。时间复杂度 O ( ∑ n ) O(\begin{aligned}\sum n\end{aligned}) O(∑n)。
总结
以后做博弈论这类的题目,思路是分类讨论。