比赛 20120612 评测结果 AAAAAAAAAA
题目名称 石木游戏 最终得分 100
用户昵称 kaaala 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2012-06-13 07:48:54
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<deque>

using namespace std;

struct edge
{
	int t;
	edge *next;
	edge(int _t,edge *_next):t(_t),next(_next){}
}*Map[10010];

int N,T,L,ans,R[10010];
deque<int>deq;
bool f[10010];

void addedge(int s,int t)
{
	Map[s]=new edge(t,Map[s]);
}

int main()
{
	freopen("rocks.in","r",stdin);
	freopen("rocks.out","w",stdout);
	scanf("%d%d%d",&N,&T,&L);
	for(int i=2;i<=N;i++)
	{	
		int s;
		scanf("%d%d",&s,&R[i]);
		R[i]%=L+1;
		addedge(s,i);
	}
	deq.push_back(1);
	while(!deq.empty())
	{
		int u=deq.front();
		deq.pop_front();
		for(edge *p=Map[u];p;p=p->next)
		{
			int t=p->t;
			deq.push_back(t);
			f[t]=!f[u];
		}
	}
	for(int i=1;i<=N;i++)
		if(f[i])
			ans^=R[i];
	for(int i=1;i<=T;i++)
	{
		int a,b;
		scanf("%d%d",&a,&b);
		if(f[a])
		{
			ans^=R[a];
			R[a]=b%(L+1);
			ans^=R[a];
		}
		if(ans)
			printf("Yes\n");
		else
			printf("No\n");
	}
	return 0;
}