比赛 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;
}