记录编号 449217 评测结果 AAAAAAAAAA
题目名称 平凡的测试数据 最终得分 100
用户昵称 GravatarArrow 是否通过 通过
代码语言 C++ 运行时间 0.670 s
提交时间 2017-09-13 21:19:45 内存使用 3.75 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define MAXN 300010

	int n,m;
	int val[MAXN],fa[MAXN]={0},w[MAXN]={0};

int find(int x)
{
	if(fa[x]==x)
		return fa[x];
	int fax=find(fa[x]);
	if(fax!=fa[x])
		val[x]=val[x]^val[fa[x]]^w[fa[x]];
	return fa[x]=fax;
}

void merge(int x,int y)  //x is father
{
	int fax=find(x);
	int fay=find(y);
	val[y]=val[x]^w[y];
	fa[fay]=fa[fax];
}

int main()
{
	freopen("td.in","r",stdin);
	freopen("td.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
		scanf("%d",&w[i]),fa[i]=i,val[i]=w[i];
	for(int i=1;i<=m;i++)
	{
		int type;
		scanf("%d",&type);
		if(type==1)
		{
			int a,b;
			scanf("%d%d",&a,&b);
			merge(b,a);
		}
		if(type==2)
		{
			int a;
			scanf("%d",&a);
			find(a);
			printf("%d\n",val[a]);
		}
	}
return 0;
}