LeeBlog

导航

hdu 1232 畅通工程

  这题就是把所有的村庄看它们是否畅通来分成n个集合,然后只要修建 n - 1 条道路就可以把他们连起来了
#include<stdio.h>
int set[ 1024 ];
int find( int i )
{
    return set[ i ] == 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",&n ) != EOF && n )
    {
           scanf( "%d",&m );
           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;
}

posted on 2011-02-26 09:39  LeeBlog  阅读(165)  评论(0编辑  收藏  举报