您的位置:首页 > 其它

ZOJ-2833Friendship(简单并查集)

2015-07-24 11:24 309 查看
//查找这个人又多少个朋友,必须从他的祖先开始查,num[find(a)];

AC代码:

#include<stdio.h>
#define max 100005
int p[max];
int num[max];
char s[max];
int a,b;
int find(int k)
{
if(p[k]!=k)
{
p[k]=find(p[k]);
num[k]+=num[p[k]];
}
return p[k];
}
int bing(int x,int y)
{
int x1=find(x);
int y1=find(y);
if(x1==y1)
{
return 0;
}
p[y1]=x1;
num[x1]+=num[y1];
return 1;
}
int main()
{
int m,n;
int k=1;
int o=0;
while(scanf("%d%d",&m,&n)!=EOF&&m)
{
int i,j;
if(o)
{
printf("\n");
}
o=1;
for(i=1;i<=max;i++)
{
p[i]=i;
num[i]=1;
}
printf("Case %d:\n",k++);
for(i=0;i<n;i++)
{
scanf("%s",s);
if(s[0]=='M')
{
scanf("%d%d",&a,&b);
bing(a,b);
}
if(s[0]=='Q')
{
scanf("%d",&a);
printf("%d\n",num[find(a)]);
}
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: