仅有距根节点为奇数距离的节点的石子被移走对答案有贡献,∵即使偶数的石子被移走,迟早会被再移到奇数,而奇数被移走后,不一定能够在移到偶数(到根了)。
最多移L个:石子数模(L+1),比较显然,也可以自己跑一跑奇数层的SG函数。
#include<cstdio> using namespace std; #define N 10001 int en,v[N],first[N],next[N]; void AddEdge(int U,int V) { v[++en]=V; next[en]=first[U]; first[U]=en; } int n,q,m,a[N],ans; void dfs(int U,int d) { if(d&1) ans^=a[U]; for(int i=first[U];i;i=next[i]) dfs(v[i],d+1); } int main() { int A,B; scanf("%d%d%d",&n,&q,&m); for(int i=2;i<=n;++i) { scanf("%d%d",&A,&a[i]); a[i]%=(m+1); AddEdge(A,i); } for(;q;--q) { scanf("%d%d",&A,&B); a[A]=B%(m+1); ans=0; dfs(1,0); puts(ans?"Yes":"No"); } return 0; }
时间: 2024-11-03 22:29:49