CodeForces 1110G. Tree-Tac-Toe
题目简述:给定$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的更多相关文章
- 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 ...
- POJ 2361 Tic Tac Toe
题目:给定一个3*3的矩阵,是一个井字过三关游戏.开始为X先走,问你这个是不是一个合法的游戏.也就是,现在这种情况,能不能出现.如果有人赢了,那应该立即停止.那么可以知道X的步数和O的步数应该满足x= ...
- 【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 ...
- 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 ...
- Codeforces 675D Tree Construction Splay伸展树
链接:https://codeforces.com/problemset/problem/675/D 题意: 给一个二叉搜索树,一开始为空,不断插入数字,每次插入之后,询问他的父亲节点的权值 题解: ...
- Codeforces 570D TREE REQUESTS dfs序+树状数组 异或
http://codeforces.com/problemset/problem/570/D Tree Requests time limit per test 2 seconds memory li ...
- Codeforces 570D - Tree Requests【树形转线性,前缀和】
http://codeforces.com/contest/570/problem/D 给一棵有根树(50w个点)(指定根是1号节点),每个点上有一个小写字母,然后有最多50w个询问,每个询问给出x和 ...
- Codeforces 23E Tree
http://codeforces.com/problemset/problem/23/E 题意:给一个树,求砍断某些边,使得所有联通块大小的乘积最大.思路:f[i][j]代表当前把j个贡献给i的父亲 ...
- Codeforces 1092F Tree with Maximum Cost(树形DP)
题目链接:Tree with Maximum Cost 题意:给定一棵树,树上每个顶点都有属性值ai,树的边权为1,求$\sum\limits_{i = 1}^{n} dist(i, v) \cdot ...
- [Educational Round 17][Codeforces 762F. Tree nesting]
题目连接:678F - Lena and Queries 题目大意:给出两个树\(S,T\),问\(S\)中有多少连通子图与\(T\)同构.\(|S|\leq 1000,|T|\leq 12\) 题解 ...
随机推荐
- C语言-回溯例2
组合问题 组合:从n个不同元素中取r个不重复的元素组成一个子集,而不考虑其元素的顺序,称为从n个中取r个的无重组合,例如OR = {1,2,3,4}, n = 4, r = 3则无重组合为: {1,2 ...
- cocos2d-x项目101次相遇:在HelloWorld上--建立新场景
cocos2d-x 101次相遇 / 文件夹 1 安装和环境搭建 -xcode 2 Scenes , Director, Layers, Sprites 3 建立图片菜单 4 在 ...
- TCP/IP协议组学习笔记
TCP/IP协议族学习笔记: 一.基础概念: (1)TCP(Transmission Control Protocol) 传输控制协议. (2)IP(Internet Protocol)网际协议.IP ...
- 几篇QEMU/KVM代码分析文章
QEMU/KVM结合起来分析的几篇文章,代码跟最新的版本有些差异,但大体逻辑一样,写得通俗易懂.我把链接放这里主要是为自己需要查看时调转过去方便,感谢作者的付出! QEMU Source Code S ...
- qt的下载链接
http://download.qt.io/archive/qt/5.8/5.8.0/ http://download.qt.io/archive/qt/ http://download.qt.io ...
- React_Redux_Router
一.react_redux 比较好的blog: blog1, blog2, blog3 主要根据前两个blog总结如下: 1. React在组件内部(包括子组件)为单向数据流且自上向下通过props传 ...
- source insight 配置小记
0/ Alt + T 打开 Document Options,设置字体,添加 C++ 类型文件 .cc , 删除 Plain txt 类型以避免添加 .txt 文件 1/ Alt + F12 切换函数 ...
- c结构体里的数组与指针
/* 訪问成员数组名事实上得到的是数组的相对地址.而訪问成员指针事实上是相对地址里的内容 */ struct buf_str { int length; char buf[0]; }; struct ...
- public,protected,private,static,final的区别(转载)
1.类 (1)在java中有public.protected.private三种显示的修饰符用于控制可见性,package不是显示的修饰符,它是隐含的,即如果在类.变量等前没加显示的可见性修饰符,那它 ...
- SAM4E单片机之旅——12、USART
清楚了UART的用法之后,现在来研究一下USART的用法.和上一次差不多,这次也通过USART的串口来实现和PC的通信.和上一次不同的是,USART本身就有接收超时的功能,所以这次就不用TC了. US ...