并查集 HDU 1856

mac2022-06-30  21

#include < iostream > #include < stdio.h > using namespace std; int father[ 10000001 ],num[ 10000001 ]; /**//* 初始化数组 */ void makeset( int x){ for ( int i = 0 ;i <= x;i ++ ) { father[i] = i; num[i] = 1 ; }} int findset( int x) // { if (x != father[x]) { father[x] = findset(father[x]); } // 回溯 return father[x];} void Union( int a, int b) // { int x = findset(a); int y = findset(b); if (x == y) { return ; } if (num[x] >= num[y]) { father[y] = x; num[x] += num[y]; } else { father[x] = y; num[y] += num[x]; } } int main(){ int n; while (scanf( " %d " , & n) != EOF) { makeset( 10000000 ); for ( int i = 1 ;i <= n;i ++ ) { int first,second; scanf( " %d%d " , & first, & second); Union(first,second); } int max =- 99999 ; for ( int i = 1 ;i <= 10000000 ;i ++ ) { if (num[i] > max) max = num[i]; } printf( " %d\n " ,max); } return 0 ;}

转载于:https://www.cnblogs.com/cyiner/archive/2011/05/16/2048237.html

最新回复(0)