poj1611解题报告

来源:互联网 发布:东海防空识别区 知乎 编辑:程序博客网 时间:2024/05/21 09:15
#include <iostream>#include <algorithm>#include <cstring>#include <cstdio>using namespace std ;const int MAXN = 30005 ;int   father[MAXN] ;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[f2] = f1 ;}int  main(){    int   n , m , num , student[MAXN] , Count ;    while( scanf( "%d%d" , & n , & m ) && n )    {        Count = 1 ;        for( int i = 0 ; i <= n ; i ++ ) father[i] = i ;        while( m -- )        {            scanf( "%d" , & num ) ;            for( int i = 0 ; i < num ; i ++ )                scanf( "%d" , & student[i] ) ;            for( int i = 1 ; i < num ; i ++ )                Union( student[0] , student[i] ) ;        }        int  temp = find( 0 ) ;        for( int i = 1 ; i < n ; i ++ ){            if( find( i ) == temp ) Count ++ ;        }        printf( "%d\n" , Count ) ;    }    return 0 ;}


这道题也是并查集的题

我就直接粘代码了

 

原创粉丝点击