#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
const int maxn=100010;
int set[maxn],cnt[maxn],top[maxn];
int set_find(int p)
{
if(set[p]<0)
return p;
if(set[set[p]]>=0)
{
int fa=set[p];
set[p]=set_find(fa);
cnt[p]+=cnt[fa];
}
return set[p];
}
void set_join(int x,int y)
{
x=set_find(x);
y=set_find(y);
set[x]=y;
set_find(top[y]);
cnt[x]=cnt[top[y]]+1;
top[y]=top[x];
}
int main()
{
int p;
scanf("%d",&p);
memset(set,-1,sizeof(set));
memset(cnt,0,sizeof(cnt));
for(int i=0;i<maxn;i++)
top[i]=i;
while(p--)
{
char s[5];
scanf("%s",s);
if(s[0]=='M')
{
int x,y;
scanf("%d%d",&x,&y);
set_join(x,y);
}else
{
int x;
scanf("%d",&x);
set_find(x);
printf("%d\n",cnt[x]);
}
}
return 0;
}
POJ1988 Cube Stacking
最新推荐文章于 2022-03-12 13:41:10 发布