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;

posted on 2012-03-08 21:50  hrbust_09zhangyabin  阅读(133)  评论(0编辑  收藏  举报