hdu6105

本文讨论了一种两人游戏策略,游戏中涉及一棵树,玩家A和B轮流给未上色的节点涂色。A涂白色,B涂黑色,并影响相邻节点。B在任何时候都可以切割树的边。当所有节点都被涂色后,存在至少一个白色节点则A胜。分析表明,B仅在树仅有两个节点时有获胜机会。问题转化为寻找匹配点以分割树的2-连通块,从叶子节点开始搜索,并确保B的操作能导致有效的分割。获胜条件为[B的分割操作不少于(n/2 - 1)次],其中n为树的节点数。
摘要由CSDN通过智能技术生成

多校第六场1010

题目链接
题意是有两个人在玩游戏,有一棵树,一开始每个节点都是没有颜色的,然后A先手,B后手,每次A可以选一个未上色节点涂成白色,B选一个未上色节点涂成黑色,同时与其直接相邻的点也被涂成黑色(无论已经上色与否),B在游戏过程中随时可以做一个小动作就是切割树的一条边。当所有点都被上色时,如果节点中有一个是白色的,那么A获胜否则B获胜,问最后胜利的情况。
看起来B好像很吊的样子,随时可以切边,但是实际上分析一下找找规律,发现B要赢其实很难的,不考虑切割时,只有在一棵树只有两个点的时候,B才能赢(找规律得出)。当一部分连通块被染色时,实际上这部分连通块相当于被切割出去了。
当A对一个点染色的时候,B想要赢必须想办法把这个点与其周围某个相邻点连成的”2-连通块“分割出去,但是不能随便分割,因为有可能导致其它点找不到匹配点。
于是问题就变成了对于树上任意一点,能否找到一个匹配点,使得被这两个点被切割后剩下部分仍然能满足这个性质。我们从叶子节点开始找匹配,就可以解决。同时,要确保B的机会数一定使每次的点对都能被分割出去。其实就是 [K>=n/2-1]

#include<algorithm>
#include<cstring>
#include<string>
#include<set>
#include<map>
#include<time.h>
#include<cstdio>
#include<vector>
<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值