比赛 |
20170912 |
评测结果 |
AAAAAAAAAA |
题目名称 |
平凡的测试数据 |
最终得分 |
100 |
用户昵称 |
Fisher. |
运行时间 |
0.486 s |
代码语言 |
C++ |
内存使用 |
4.13 MiB |
提交时间 |
2017-09-12 21:38:29 |
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
inline int read(){
int x=0,f=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+c-'0';c=getchar();}
return x*f;
}
const int maxn=500010;
int fa[maxn];
int lf[maxn];
int n,q;
inline int find(int x){
if(fa[x]==x)return x;
int tmp=fa[x];
fa[x]=find(fa[x]);
if(fa[x]!=tmp)
lf[x]^=lf[tmp];
return fa[x];
}
int main(){
freopen("td.in","r",stdin);
freopen("td.out","w",stdout);
n=read();q=read();
for(int i=1;i<=n;i++){fa[i]=i;lf[i]=read();}
for(int i=1;i<=q;i++){
int c=read(),a,b;
if(c==1){
a=read();b=read();
fa[a]=b;
}
if(c==2){
a=read();
int c=find(a);
if(fa[a]!=a)
printf("%d\n",lf[a]^lf[fa[a]]);
else
printf("%d\n",lf[a]);
}
}
return 0;
}