【转】HDOJ-1856-More is better: 简单。优化查找max one的速度。用C语言输入输出。

#include<cstdio>
#include<algorithm>
using namespace std;
#define Size 10000000
int Par[Size+1], Sum[Size+1];

int GetPar( int a )
{
        if( Par[a]!=a )
            Par[a] = GetPar( Par[a] );
        return Par[a];
}

void Union( int a, int b )
{
        int Pa = GetPar( a );
        int Pb = GetPar( b );

        if( Pa == Pb )
            return ;
        Par[Pa] = Pb;
        Sum[Pb]+=Sum[Pa];
}

int main()
{
    int n, A, B;
        while( ~scanf("%d", &n) ){
                for( int i=1; i<=Size; i++ ){
                        Par[i] = i;
                        Sum[i]=1;
                }
                int ans=1;
                for( int i=0; i<n; i++ )
                {
                        scanf( "%d %d", &A, &B );
                        Union( A, B );
                        ans = max( Sum[Par[B]], ans );// 合并时候 就查找max one
                }
                printf( "%d\n", ans );
        }
        return 0;
}

 

posted @ 2015-07-24 09:20  _SunDaSheng  阅读(121)  评论(0编辑  收藏  举报