原题链接

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
#define mid ((l+r)>>1)
const int INF=1e9+7,MAXNODE=24e6+7,MAXN=1e6+7;
int N,M,tmp[MAXN],rt[MAXN];
int fa[MAXNODE],dep[MAXNODE],lson[MAXNODE],rson[MAXNODE],sz;
void init(int &x,int l,int r){
    x=++sz;
    if(l==r){
        fa[x]=l;
        return;
    }
    init(lson[x],l,mid);
    init(rson[x],mid+1,r);
}
void modify(int &x,int l,int r,int p/*pre*/,int q/*pos*/,int v){
    x=++sz;
    if(l==r){
        fa[x]=v;
        dep[x]=dep[p];
        return;
    }
    lson[x]=lson[p];
    rson[x]=rson[p];
    if(q<=mid)
        modify(lson[x],l,mid,lson[p],q,v);
    else
        modify(rson[x],mid+1,r,rson[p],q,v);
}
int query(int x,int l,int r,int q){
    if(l==r)
        return x;
    if(q<=mid)
        return query(lson[x],l,mid,q);
    return query(rson[x],mid+1,r,q);
}
int findset(int edit,int loc){
    int f=query(edit,1,N,loc);
    if(fa[f]==loc)
        return f;
    return findset(edit,fa[f]);
}
void add_dep(int x,int l,int r,int loc){
    if(l==r){
        dep[x]++;
        return;
    }
    if(loc<=mid)
        add_dep(lson[x],l,mid,loc);
    else
        add_dep(rson[x],mid+1,r,loc);
}
int main(){
    scanf("%d%d",&N,&M);
    init(rt[0],1,N);
    for(int i=1;i<=M;i++){
        int opt;
        scanf("%d",&opt);
        if(opt==1){
            rt[i]=rt[i-1];
            int a,b;
            scanf("%d%d",&a,&b);
            int f1=findset(rt[i],a),f2=findset(rt[i],b);
            if(dep[f1]>dep[f2])
                swap(f1,f2);
            modify(rt[i],1,N,rt[i-1],fa[f1],fa[f2]);
            if(dep[f1]==dep[f2])
                add_dep(rt[i],1,N,fa[f2]);
        }else if (opt==2){
            int edit;
            scanf("%d",&edit);
            rt[i]=rt[edit];
        }else{
            rt[i]=rt[i-1];
            int a,b;
            scanf("%d%d",&a,&b);
            int f1=findset(rt[i],a),f2=findset(rt[i],b);
            puts(f1==f2?"1":"0");
        }
    }
    return 0;
}
代码

相关文章:

  • 2022-01-11
  • 2022-03-01
  • 2021-12-14
  • 2022-02-26
猜你喜欢
  • 2021-08-08
  • 2021-10-06
  • 2021-08-25
  • 2021-12-27
  • 2021-05-28
相关资源
相似解决方案