hdu 1232畅通工程

问题描述如下:

“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路?
城镇数码N,道路数目M;

简单的畅通工程,只要套模板就OK 。不过要理解哦。。。(若有N个集合,则最少只需N-1条道路就可以连起来)

#include"stdio.h"
int set[1024];
int find(int i)
{
    return set[i]==i?set[i]:find(set[i]);  
}
void  merge(int x,int y)
{
    int a=find(x),b=find(y);
    set[a]=b;     
}
int main()
{
    int N,M,a,b;
    while(scanf("%d %d",&N,&M)!=EOF&&N)
    {
         for(int i=1;i<=N;++i)
             set[i]=i;
         for(int i=1;i<=M;++i)              
         {
             scanf("%d%d",&a,&b);
             merge(a,b);       
         }
         int c=0;
         for(int i=1;i<=N;++i)
             if(set[i]==i)
               ++c;
        printf("%d\n",c-1);
    }   
    return 0;
}

原文地址:https://www.cnblogs.com/QQbai/p/2129075.html