题意:删边并去除与跟不想连的边,最后不能移动的人失败
题解:每个根节点的SG为0,中间节点的SG为所有根节点SG值加一的亦或和。
代码:
#include<bits/stdc++.h>
#include<cstring>
using namespace std;
const int maxn = 1e5+50;
vector<int> G[maxn];
int sg[maxn];
int get_sg(int u,int fa)
{
if(sg[u] != -1)
return sg[u];
sg[u] = 0;
for(int i = 0 ; i < G[u].size(); i++)
{
int v = G[u][i];
if(v == fa) continue;
get_sg(v,u);
sg[u] = (sg[u]^(1+sg[v]));
}
return sg[u];
}
int main()
{
int T,n,u,v;