HDU1232-畅通工程

http://acm.hdu.edu.cn/showproblem.php?pid=1232

#include<stdio.h>
#define MAX 1005
int fa[MAX];
int find(int x)
{
    return fa[x]==x?x:fa[x]=find(fa[x]);
}
void merge(int x,int y)
{
    x=find(x);
    y=find(y);
    if(x!=y)
       fa[x]=y;
}
int main(void)
{
    int n,m,x,y,i,j,sum;
    while(scanf("%d",&n)&&n)
    {
        scanf("%d",&m);
        for(i=1;i<=n;i++)
           fa[i]=i;
         while(m--)
         {
             scanf("%d%d",&x,&y);
             merge(x,y);
         }        
         sum=0;
         for(i=1;i<=n;i++)
            for(j=i+1;j<=n;j++)
               if(find(i)!=find(j))
               {
                      sum++;
                   fa[find(i)]=find(j);              
               }
         printf("%d\n",sum);
    }
    return 0;
}
posted @ 2012-08-30 22:08  Yogurt Shen  阅读(90)  评论(0编辑  收藏  举报