abc--279--F

abc--279--F

#include <bits/stdc++.h>
using namespace std;
const int M=3e5+5;

//盒子的编号不是固定的
//只要将两个人的id换一下,就可以实现swap(box[i],box[j])
//映射关系,便于查找球对应的是哪一个编号

vector<int>box[M];
int fa[M<<1],id[M],di[M];

int main() {
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int n,q;
    cin>>n>>q;
    for(int i=1;i<=n;i++) {
        id[i]=di[i]=fa[i]=i;
        box[i].push_back(i);
    }
    while(q--) {
        int op,x,y;
        cin>>op>>x;
        if(op==1) {
            cin>>y;
            //大的放到小的里面
            if(box[id[x]].size()<box[id[y]].size()) {
                swap(id[x],id[y]);
                swap(di[id[x]],di[id[y]]);
            }
            for(auto c:box[id[y]]) {
                box[id[x]].push_back(c);
                fa[c]=id[x];
            }
            box[id[y]].clear();//记得清空
        }
        if(op==2) {
            fa[++n]=id[x];
            box[id[x]].push_back(n);
        }
        if(op==3)cout<<di[fa[x]]<<endl;
    }
    return 0;
}
posted @ 2022-12-20 14:39  basicecho  阅读(23)  评论(0)    收藏  举报