HDU 畅通工程

#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 @ 2011-03-29 21:27  贺佐安  阅读(163)  评论(0)    收藏  举报