hdu 1856 More is better
题目链接: hdu 1856 More is better
题目大意: 输出最大数量的集合的数量
上代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
#define N 10000005
int m;
int x, y;
int s[N];
int _size[N];
int mxn;
int _find(int x){
if(x != s[x]){
s[x] = _find(s[x]);
}
return s[x];
}
void _merge(int x, int y){
x = _find(x);
y = _find(y);
if(x != y){
s[y] = x;
_size[x] += _size[y];
if(_size[x] > mxn){
mxn = _size[x];
}
}
}
int main()
{
while(~scanf("%d", &m)){
mxn = 1;
for(int i = 1; i < N; i++){
s[i] = i;
_size[i] = 1;
}
while(m--){
scanf("%d%d",&x, &y);
_merge(x, y);
}
printf("%d\n", mxn);
}
return 0;
}
要点: 这道题会卡空间限制,所以不用height[]来记录高度。还有在merge时一定不要我忘了判断(x != y),然后可以在merge中顺便把最大值找出来。