记录编号 366860 评测结果 AAAAAAAATTTTWWWATTWT
题目名称 黑白树的操作 最终得分 45
用户昵称 GravatarGo灬Fire 是否通过 未通过
代码语言 C++ 运行时间 37.655 s
提交时间 2017-01-26 10:12:09 内存使用 10.04 MiB
显示代码纯文本
#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",&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;
		}
	}
}