比赛 |
9.6 |
评测结果 |
AAAAAAAAAA |
题目名称 |
平凡的测试数据 |
最终得分 |
100 |
用户昵称 |
djyqjy |
运行时间 |
0.630 s |
代码语言 |
C++ |
内存使用 |
4.77 MiB |
提交时间 |
2024-09-06 20:40:18 |
显示代码纯文本
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=300010;
int n,m;
int fa[N],z[N];
int get(int x)
{
if(fa[x]==x) return x;
int f=get(fa[x]);
z[x]^=z[fa[x]];
if(fa[fa[x]]==fa[x]) z[x]^=z[fa[x]];
return fa[x]=f;
}
void merge(int a,int b)
{
get(a);
fa[a]=get(b);
z[a]^=z[b];
if(fa[b]==b) z[a]^=z[b];
return;
}
signed main()
{
freopen("td.in","r",stdin);
freopen("td.out","w",stdout);
scanf("%lld%lld",&n,&m);
for(int i=1;i<=n;i++)
fa[i]=i;
for(int i=1;i<=n;i++)
scanf("%lld",&z[i]);
for(int i=1;i<=m;i++)
{
int op;
scanf("%lld",&op);
if(op==1)
{
int a,b;
scanf("%lld%lld",&a,&b);
merge(a,b);
}
else if(op==2)
{
int a;
scanf("%lld",&a);
int f=get(a);
printf("%lld\n",z[a]^z[f]^(f==a?z[a]:0));
}
}
return 0;
}