比赛 寒假颓废练习 评测结果 WWWWWWWWWWWWWWWWWWWW
题目名称 黑白树的操作 最终得分 0
用户昵称 Go灬Fire 运行时间 0.008 s
代码语言 C++ 内存使用 10.04 MiB
提交时间 2017-01-25 20:23:26
显示代码纯文本
#include<cmath>
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
#define LL long long
const int maxn=150000;
const int maxm=350000;
struct Edge{
	int next,to,dis;
}e[maxm*2];
int n,m,B[maxn],ans;
int vis[maxn],Time;
int len,head[maxn]; 
void Insert(int x,int y,int z){
	len++;e[len].to=y;e[len].next=head[x];
	e[len].dis=z;head[x]=len;
}
void Query(int x,int now){
	if(vis[x]==Time)return;
	vis[x]=Time;
	if(B[x])ans+=now;
	for(int i=head[x];i;i=e[i].next){
		int j=e[i].to;
		if(vis[j]!=Time)Query(j,now+e[i].dis);
	}
}
void Init();
int main(){
	freopen("MD5.in","r",stdin);freopen("MD5.out","w",stdout);
	Init();
	getchar();getchar();
	return 0;
}
void Init(){
	scanf("%*d%d%d",&n,&m);
	for(int i=1;i<=m;i++){
		char type;scanf(" %c",&type);
		if(type=='A'){
			int x,y,z;scanf("%d%d%d",&x,&y,&z);
			x^=ans;y^=ans;z^=ans;
			Insert(x,y,z);Insert(y,x,z);
		}
		if(type=='C'){
			int x;scanf("%d",&x);x^=ans;
			B[x]=!B[x];
		}
		if(type=='Q'){
			int x;scanf("%d",&x);x^=ans;
			ans=0;Time++;
			Query(x,0);
			printf("%d\n",ans);
			ans%=n;if(ans<0)ans+=n;
		}
	}
}