#include<cstdio>
#include<cstring>
#define N 200020
using namespace std;
int pre[N],num[N],sum[N];
int find(int x){
return pre[x]==x?x:find(pre[x]);
}
void merge(int x,int y,int op){
int t1=find(x);
int t2=find(y);
if(t1==t2)
return ;
if(op==1){
pre[t2]=t1;
num[t1]+=num[t2];
sum[t1]+=sum[t2];
}
else{
pre[x]=t2;
num[t1]--,sum[t1]-=x;
num[t2]++,sum[t2]+=x;
}
}
int cal(int x){
int t1=find(x);
printf("%d %d\n",num[t1],sum[t1]);
}
int main(){
int n,q,t,a,b;
while(scanf("%d%d",&n,&q)==2){
for(int i=1,j=n+1;i<=n;i++,j++){
pre[i]=pre[j]=j;
sum[j]=i,num[j]=1;
}
while(q--){
scanf("%d",&t);
if(t==1||t==2){
scanf("%d%d",&a,&b);
merge(a,b,t);
}
else{
scanf("%d",&a);
cal(a);
}
}
}
}
uva 11987 并查集
最新推荐文章于 2023-03-09 21:25:32 发布