比赛 20170912 评测结果 AAAAAAAAAA
题目名称 平凡的测试数据 最终得分 100
用户昵称 Ostmbh 运行时间 0.680 s
代码语言 C++ 内存使用 7.94 MiB
提交时间 2017-09-12 20:37:21
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn=500000+10;
int fa[maxn];
int v[maxn];
int d[maxn];
int top[maxn];
inline int find(int x){
	if(x==fa[x])
		return x;
	else {
		int u=fa[x];
		int p=find(u);
		if(p!=u){
			v[x]=v[u]^v[x];
			v[x]^=d[u];
			fa[x]=p;
		}
		return fa[x];
	}
}
int main(){
	freopen("td.in","r",stdin);
	freopen("td.out","w",stdout);
	int n,m;
	scanf("%d %d",&n,&m);
	for(int i=1;i<=n;i++)
		scanf("%d",&d[i]);
	for(int i=1;i<=n;i++)
		v[i]=d[i];
	for(int i=1;i<=n;i++)
		fa[i]=i;
	int opt,x,y;
	for(int i=1;i<=m;i++){
		scanf("%d",&opt);
		if(opt==1){
			scanf("%d %d",&x,&y);
			int fy=find(y);
			v[x]=d[x]^v[y];
			fa[x]=fy;
		}
		else {
			scanf("%d",&x);
			find(x);
			printf("%d\n",v[x]);
		}
	}
return 0;
}