lig1073------------------------第二道并查集
这道题和上一道很类似。第一道会了,第二道很快就AC了!
不同的是,上一道是找有多少个不相交集合。 求集合的数量。
这一道是求某个确定集合中的元素个数。
不难,中间遇到的一个小麻烦,是因为对基础概念理解不深。
http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1073
AC代码:
#include<stdio.h>
int set[50005];
int find(int x)
{
int r;
r=x;
while(set[r]!=r)
r=set[r];
return r;
}
void merge(int x,int y)
{
int fx,fy;
fx=find(x);
fy=find(y);
if(fx!=fy)
{
if(fx<fy)
set[fy]=fx;
else
set[fx]=fy;
}
}
int main()
{
int n,m,x,y,i,count;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=0;i<n;i++)
set[i]=i;
while(m--)
{
scanf("%d%d",&x,&y);
merge(x,y);
}
count=0;
for(i=0;i<n;i++)
{
if(find(i)==0)
count++;
}
printf("%d\n",count);
}
return 0;
}