poj 2524 Ubinquitous Religions (并查集)

依旧简单并查集,拿1611火速改了改火速提交,果断PE...把输出的最后一个空格放%d前面了,真活该不运行就交。

但是这题有个疑问,为什么按秩合并没有比直接合并快??

code: 

#include<cstdio>
int p[ 50005], r[ 50005] ;
void make_set( int n){
     for( int i= 0; i<n; i++){
        p[i] = i ;
        r[i] =  0 ;
    }
}
int find_set( int x){
     if(x!=p[x])
        p[x] = find_set(p[x]) ;
     return p[x] ;
}
void union_set( int x,  int y){
    x = find_set(x) ;
    y = find_set(y) ;
     if(x!=y){
         if(r[x]>r[y])
            p[y] = x ;
         else{
            p[x] = y ;
             if(r[x]==r[y])
                r[x] ++ ;
        }

    }
}
int main(){
     int n, m, i, x, y, sum, t= 0 ;
     while(~scanf( " %d%d ", &n, &m)&&(n+m)){
        t ++ ;
        make_set(n) ;
         while(m--){
            scanf( " %d ", &x) ;
            scanf( " %d ", &y) ;
            union_set(x, y) ;
        }
        sum =  0 ;
         for(i= 0; i<n; i++)
             if(i==find_set(i))
                sum ++ ;
        printf( " Case %d: %d\n ", t, sum) ;
    }
     return  0 ;

} 

你可能感兴趣的:(poj)