[AGC014D]Black and White Tree

题目地址:

AGC014D

题意:

给你一棵树,两个人轮流在上面染色,每个人每次会把一个节点染成黑色或者白色,当所有点都被染了色后,如果存在一个白色的节点,它的所有相邻的节点均为白色,则先手胜,否则后手胜,问先手必胜还是后手必胜。

题解:

考场上想出了一种乱搞做法:

显然若有一个节点,它有两个以上的儿子是叶子节点,那么先手染这个点为白色就必胜,我们称这种点为必胜节点。

然后我们考虑这样的情况:

若一个节点有且仅有一个儿子,且这个儿子还是叶子节点,那么先手一定可以在这个节点上染上白色,后手就一定要在叶子节点上染黑色。于是这两个节点就对我们的答案没有影响了,可以删去,因为这个点一定是白色节点。

当我们把这种点全部删掉后,我们在剩下的树上找是否存在必胜节点,若存在则先手必胜,若不存在则后手必胜。

注意如果删完点后只剩根那也是先手必胜。

 

关于删点的方法,我们只要找到size=2的节点,打个标记即可。

 

不过好像是完美匹配的题?跑网络流?Dinic分层图飞快?

代码:

#include <bits/stdc++.h>
using namespace std;

#define MAXN 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值