题目简述:给定$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. 可在 html5 游戏中使用的 js 工具库

    可在 html5 游戏中使用的 js 工具库 作者: 木頭 时间: September 21, 2014 分类: Utilities,Game 使用 cocos2d-js 3.0 开发游戏项目两三个月 ...

  2. C++再次理解虚表

    #include <iostream> using namespace std; class Base { public: virtual void fun1() { cout <& ...

  3. xadmin入门使用

    ,官方文档:http://xadmin.readthedocs.io/en/docs-chinese/views_api.html 中文文档:https://www.kancloud.cn/net_y ...

  4. VS + Qt5Designer + Anaconda环境配置

    最近打算做一个模型训练工具,从来都不喜欢做UI的我,最终把目光放在了QtDesigner上.配环境的过程中在网上翻阅了不少博客,但大多是pycharm或者是VScode,使用VS的似乎不多.所以打算记 ...

  5. C#注冊表操作汇总

    一.注冊表基本知识 1)       结构 键->项->子项->值项(名称.类型.数据) REG_SZ         字符串 REG_BINARY    二进制 REG_DWORD ...

  6. 搭建mongoDB 配置副本集 replSet

    mongodb的master_slave和ReplSet是很常见的两种构架: 下面记录下搭建mongodbReplSet 的过程: 首先,进入到一个指定目录下 >cd /opt 下载mongod ...

  7. 文件共享和使用 dup 函数创建新描述符的区别

    前言 文件共享是指同时打开一个文件 用 dup 函数能对指定文件描述符再创建一个新的描述符,且这个新的描述符和旧的描述符指向的是同一个文件. 这两种行为有什么区别呢?下面给出的两张文件系统的图形象的解 ...

  8. 【BZOJ1520】[POI2006]Szk-Schools KM算法

    [BZOJ1520][POI2006]Szk-Schools Description Input Output 如果有可行解, 输出最小代价,否则输出NIE. Sample Input 5 1 1 2 ...

  9. ASP.NET MVC4中ViewBag、ViewData和TempData的使用和区别

    一.说明 本文章主要是讲解asp.net mvc中ViewBag.ViewData和TempData的使用和区别,ViewBag.ViewData和TempData常常用于将action方法中的数据传 ...

  10. Java类加载器( 死磕8)

    [正文]Java类加载器(  CLassLoader ) 死磕 8:  使用ASM,和类加载器实现AOP 本小节目录 8.1. ASM字节码操作框架简介 8.2. ASM和访问者模式 8.3. 用于增 ...