您的位置:首页 > 其它

poj 1988 Cube Stacking 并查集

2014-06-27 17:07 381 查看
#include <stdio.h>
#define maxn 40000
int p[maxn],sum[maxn],d[maxn];
int find(int x)
{
if(p[x]==x) return x;
else
{
int tmp=p[x];
p[x]=find(p[x]);
d[x]+=d[tmp];
return p[x];
}
}
int main()
{
int num;
char o;
while(scanf("%d",&num)!=EOF)
{
int i,j;
int u,v;
int fu,fv;
for(i=1;i<=33000;i++)
{
p[i]=i;
sum[i]=1;
d[i]=0;
}
getchar();
for(i=1;i<=num;i++)
{
scanf("%c",&o);
if(o=='C')
{
scanf("%d",&u);
fu=find(u);
printf("%d\n",d[u]);
}
else
{
scanf("%d%d",&u,&v);
fu=find(u);
fv=find(v);
p[fu]=fv;
d[fu]+=sum[fv];
sum[fv]+=sum[fu];
}
getchar();
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: