题目简述:给定$n$个节点的树,其中一些节点被染成了白色(其余节点未染色)。黑白双方博弈,白先动。轮到黑(白)方时,选择树上的一个未染色的节点并将其染成黑(白)色。率先达成三连色(即存在三个节点$a, b, c$,其中$a$与$b$相连,$b$与$c$相连,且他们的颜色相同)的一方获胜。问哪方获胜或者和局。

解:code

观察1:任何一个游戏开始之前被染成白色的节点$A$,可以等价于添加边$(A, B), (B, C), (B, D)$,并把$A$设为未染色,其中$B, C, D$是新添加的节点(并且只在此处出现)。(见下图,来自 CodeForces

证明:白方先动,则选择节点$A$染色,这样黑方只能选择节点$B$染色,不然白方将$B$染色后必胜——这就相当于节点$A$在游戏开始之前被染成白色;白方不可能先染节点$B, C, D$,这样节点$A$可被黑方染色,显然局势劣于白方选择先染节点$A$。

通过观察1,我们可以将$n$个节点的树转化成一个至多$4n$个节点、并且每个节点都未染色的树,我们将这样的树称为【标准的】。

观察2:若存在一个节点,其度数$\geq 4$,则白方必胜。(见下图,来自 CodeForces

证明:白方直接选择度数$\geq 4$的节点染色,则显然必胜。

观察3:若存在一个节点度数$ = 3$,且这个节点有至少$2$个相邻节点的度数$\geq 2$,则白方必胜。(见下图,来自 CodeForces

证明:白方直接选择图3中的根节点染色,则显然必胜。

观察3.1:若存在$\geq 3$个度数$=3$的节点,则其中必存在一个度数$=3$的节点至少有$2$个度数$\geq 2$的相邻节点,从而转化为观察3的情形。

观察4:若树中只有$2$个度数$=3$的节点,且这两个节点的距离为偶数,则白方必胜。(见下图,来自 CodeForces

证明:考虑两个度数$=3$的节点对应的树链。若这两个节点的距离$\geq 4$,则根据观察1,我们课可以将其化为左右两端节点染成白色的一条链上的问题,显然白方必胜;若距离$=2$,白方也显然必胜。

观察5:在【标准的】树中,白方必胜当且仅当这棵树能满足观察2至观察4中所述情况,除了这些情况外,一定和局。

观察2至观察4的条件均可在$O(n)$时间内检验,故时间复杂度为$O(n)$。

CodeForces 1110G. Tree-Tac-Toe的更多相关文章

  1. Principle of Computing (Python)学习笔记(7) DFS Search + Tic Tac Toe use MiniMax Stratedy

    1. Trees Tree is a recursive structure. 1.1 math nodes https://class.coursera.org/principlescomputin ...

  2. POJ 2361 Tic Tac Toe

    题目:给定一个3*3的矩阵,是一个井字过三关游戏.开始为X先走,问你这个是不是一个合法的游戏.也就是,现在这种情况,能不能出现.如果有人赢了,那应该立即停止.那么可以知道X的步数和O的步数应该满足x= ...

  3. 【leetcode】1275. Find Winner on a Tic Tac Toe Game

    题目如下: Tic-tac-toe is played by two players A and B on a 3 x 3 grid. Here are the rules of Tic-Tac-To ...

  4. 2019 GDUT Rating Contest III : Problem C. Team Tic Tac Toe

    题面: C. Team Tic Tac Toe Input file: standard input Output file: standard output Time limit: 1 second M ...

  5. Codeforces 675D Tree Construction Splay伸展树

    链接:https://codeforces.com/problemset/problem/675/D 题意: 给一个二叉搜索树,一开始为空,不断插入数字,每次插入之后,询问他的父亲节点的权值 题解: ...

  6. Codeforces 570D TREE REQUESTS dfs序+树状数组 异或

    http://codeforces.com/problemset/problem/570/D Tree Requests time limit per test 2 seconds memory li ...

  7. Codeforces 570D - Tree Requests【树形转线性,前缀和】

    http://codeforces.com/contest/570/problem/D 给一棵有根树(50w个点)(指定根是1号节点),每个点上有一个小写字母,然后有最多50w个询问,每个询问给出x和 ...

  8. Codeforces 23E Tree

    http://codeforces.com/problemset/problem/23/E 题意:给一个树,求砍断某些边,使得所有联通块大小的乘积最大.思路:f[i][j]代表当前把j个贡献给i的父亲 ...

  9. Codeforces 1092F Tree with Maximum Cost(树形DP)

    题目链接:Tree with Maximum Cost 题意:给定一棵树,树上每个顶点都有属性值ai,树的边权为1,求$\sum\limits_{i = 1}^{n} dist(i, v) \cdot ...

  10. [Educational Round 17][Codeforces 762F. Tree nesting]

    题目连接:678F - Lena and Queries 题目大意:给出两个树\(S,T\),问\(S\)中有多少连通子图与\(T\)同构.\(|S|\leq 1000,|T|\leq 12\) 题解 ...

随机推荐

  1. scp windows 和 linux 远程复制 (双向)

    一下命令在cmd中 从w -> l : scp D:\a.txt root@192.168.2.113:/home/a 从l -> w: scp root@192.168.2.113:/h ...

  2. 编程算法 - 多重部分和问题 代码(C)

    多重部分和问题 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 有n种不同大小的数字a, 每种各m个. 推断能否够从这些数字之中选出若干使它们的 ...

  3. [2011山东ACM省赛] Binomial Coeffcients(求组合数)

    Binomial Coeffcients nid=24#time" style="padding-bottom:0px; margin:0px; padding-left:0px; ...

  4. Java Base64加密、解密原理Java代码(转载)

    博客来源:http://blog.csdn.net/songylwq/article/details/7578905 Base64是什么: Base64是网络上最常见的用于传输8Bit字节代码的编码方 ...

  5. windows快捷键大全(转载)

    常见用法: F1 显示当前程序或者windows的帮助内容. F2 当你选中一个文件的话,这意味着“重命名” F3 当你在桌面上的时候是打开“查找:所有文件” 对话框 F10或ALT 激活当前程序的菜 ...

  6. 【转】Android IDA 动态调试最完善攻略,跨过各种坑

    前提条件和运行环境一定要写清楚,不然会有很多坑,坑死人. (1)IDA 是最新的7.0版本  (2) JDB 使用Java安装目录下的 (3)系统是win10 使用命令窗口时有很大的差别 (4)手机是 ...

  7. Js 模拟鼠标点击事件

    var obj = document.getElementById('go'); if(document.all){ obj.click(); }else{ var e = document.crea ...

  8. 【BZOJ1844/2210】Pku1379 Run Away 模拟退火

    [BZOJ1844/2210]Pku1379 Run Away 题意:矩形区域中有一堆点,求矩形中一个位置使得它到所有点的距离的最小值最大. 题解:模拟退火的裸题,再调调调调调参就行了~ #inclu ...

  9. [洛谷P3941] 入阵曲

    题目背景 丹青千秋酿,一醉解愁肠. 无悔少年枉,只愿壮志狂. 入阵曲 题解在代码里. #include<iostream> #include<cstdio> #include& ...

  10. 解密阿里云Redis助力双十一背后的技术

    摘要: Redis是一个使用范围很广的NOSQL数据库,阿里云Redis同时在公有云和阿里集团内部进行服务,本文介绍了阿里云Redis双11的一些业务场景:微淘社区之亿级关系链存储.天猫直播之评论商品 ...