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\) 题解 ...
随机推荐
- 不使用while,for,if等实现加法
不使用if, while,for,switch等实现从1到10的加法 解:这里使用静态函数和静态变量实现,利用类似的方法也能够实现从1打印到1000 class TheSum{ public: The ...
- websotrom 2016.2 license Server
license server” 输入:http://114.215.133.70:41017 仅供学习测试使用,支持正版.
- 基于TCP的通信程序设计
套接字(Socket)是一种跨主机进程之间的双向通信接口,每个打开的套接字都可以通过一个套接字描述符来描述,因此可以使用低级文件编程库操作套接字. TCP是一中面向连接的网络传输控制协议.它每发送一个 ...
- PowerDesigner逆向工程,从SQL Server数据库生成Physical Model -----数据源方式
1.File-Reverse Engineer-Database 2.DBMS选择SQL Server 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 一路Next..... ...
- warez世界顶级压缩作品网站
http://www.pouet.net/ warez世界顶级压缩作品网站
- Android 监听返回键退出程序的两种实现
1.Android 双击返回键退出程序 思路:用户按下返回键时设定一个定时器来监控是否2秒内实现了退出,如果用户没有接着按返回键,则清除第一次按返回键的效果,使程序还原到第一次按下返回键之前的状态.定 ...
- 解决express video 手机无法播放的问题
http://stackoverflow.com/questions/24976123/streaming-a-video-file-to-an-html5-video-player-with-nod ...
- android系统启动框架、Activity界面显示过程详解
一.Android系统框架 android的系统架构和其操作系统一样,采用了分层的架构.从架构图看,android分为四个层,从高层到低层分别是应用程序层.应用程序框架层.系统运行库层和linux核心 ...
- java 接口自动化测试之数据请求的简单封装
我们自己用java写接口自动化测试框架或者做个接口自动化测试平台的话,是需要自己进行相关的请求的,因此我们需要简单的封装下httpclient,我新建了一个http工具类,将get方法和post方法进 ...
- hadoop内存分配方案
Configuration File Configuration Setting Value Calculation 8G VM (4G For MR) yarn-site.x ...