您的位置:首页 > 其它

poj 1611 The Suspects 并查集

2014-02-07 11:01 471 查看
题目链接:http://poj.org/problem?id=1611

题目思路:大体方向还是很明确的,就是并查集。但是初学并查集的我还是没有明确的思路,有几个想法仔细想想都不对,后来想到记录下个数,也就是祖先和祖先下面的人的个数,最后求出0的祖先的个数就可以了。。(好久之前留的。。。现在才Ac。。惭愧啊。。)

AC代码:

#include<stdio.h>
int p[30005],num[30005];
int find(int a)
{
if(a!=p[a])
p[a]=find(p[a]);
return p[a];
}
void arr(int a,int b)
{
a=find(a);
b=find(b);
if(a==b)return;
p[b]=a;
num[a]+=num[b];
}
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m),n+m)
{
int i,j,t,a,b;
for(i=0;i<n;i++)
{
p[i]=i;
num[i]=1;
}
for(i=0;i<m;i++)
{
scanf("%d%d",&t,&a);
for(j=1;j<t;j++)
{
scanf("%d",&b);
arr(a,b);
}
}
printf("%d\n",num[find(0)]);
}
return 0;
}AC截图:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  并查集 poj