比赛 寒假颓废练习 评测结果 WWWWWWWWWWWWWWWWWWWW
题目名称 黑白树的操作 最终得分 0
用户昵称 AntiLeaf 运行时间 0.026 s
代码语言 C++ 内存使用 2.69 MiB
提交时间 2017-01-25 20:11:02
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
const int maxn=100010;
void dfs(int,int,long long);
vector<int>G[maxn],W[maxn];
bool w[maxn]={false};
long long ans=0;
int n,m,x,y,z;
char c;
int main(){
	freopen("MD5.in","r",stdin);
	freopen("MD5.out","w",stdout);
	scanf("%*d%d%d",&n,&m);
	while(m--){
		if((ans%=n)<0)ans+=n;
		scanf(" %c%d",&c,&x);
		x^=ans;
		if(c=='A'){
			scanf("%d%d",&y,&z);
			y^=ans;z^=ans;
			G[x].push_back(y);
			W[x].push_back(z);
			G[y].push_back(x);
			W[y].push_back(z);
		}
		else if(c=='C')w[x]^=true;
		else if(c=='Q'){
			ans=0;
			dfs(x,0,0);
			printf("%lld\n",ans);
		}
	}
	return 0;
}
inline void dfs(register int x,register int p,register long long d){
	if(w[x])ans+=d;
	for(register int i=0;i<(int)G[x].size();i++)if(G[x][i]!=p)dfs(G[x][i],x,d+W[x][i]);
}