这题也是并查集,最近并查集写的有点多
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std ;
int father[50005] ;
int find( int x )
{
if( father[x] != x ) father[x] = find( father[x] ) ;
return father[x] ;
}
void Union( int a , int b )
{
int f1 = find( a ) ;
int f2 = find( b ) ;
if( f1 != f2 ) father[f1] = f2 ;
}
int main()
{
int n , m ;
int i , j , a , b ;
int Count , num = 0 ;
while( scanf( "%d%d" , & n , & m ) && n && m )
{
Count = 0 ;
num ++ ;
for( i = 0 ; i <= n ; i ++ ) father[i] = i ;
while( m -- )
{
scanf( "%d%d" , & a , & b ) ;
Union( a , b ) ;
}
for( i = 1 ; i <= n ; i ++ ) if( father[i] == i ) Count ++ ;
printf( "Case %d: %d\n" , num , Count ) ;
}
return 0 ;
}