题意
给你一棵树,先手后手轮流操作,每次先手可以把某个未染色节点染白,后手可以把某个未染色节点染黑。等没有未染色节点时,所有与黑点相邻的白色点都会变黑,若仍存在白点,则先手胜,反之则后手胜。
n<=100000
分析
结论:若存在完美匹配的后手必胜,否则先手必胜。
证明:若存在完美匹配,无论先手染哪一个点,后手必然可以染该点的匹配点,从而后手必胜。
若不存在完美匹配,则必然有至少一个叶节点存在于最大匹配中。先手可以每次找一个存在于最大匹配中的叶节点,将其相邻节点染白,则黑点必然只能染该叶节点。因为没有完美匹配,所以到最后必然会剩下至少一个未匹配点,满足其相邻节点都被染成了白色且当前先手操作。所以先手必胜。
代码
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=100005;