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;
}
浙公网安备 33010602011771号