【转】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; }