题目数据比较水,改天写个离散化的代码;
还我一点我要吐槽,为神马
ans = ans > res[i] ? ans : res[i];
就超时了,而
if(ans < res[i])
ans = res[i];
就过了呢,他们到底相差多少呢?
附我的代码(AC,390MS)
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const int MAX = 10000000 + 5;
int f[MAX], res[MAX], ans;
void init(){
for(int i = 0; i <= MAX; ++i)
f[i] = i, res[i] = 1;
}
int find(int a){
return a == f[a] ? a : f[a] = find(f[a]);
}
void uni(int a, int b){
int fa = find(a), fb = find(b);
if(fa != fb){
f[fa] = fb;
res[fb] += res[fa];
if(ans < res[fb])
ans = res[fb];
}
}
int main(){
int n, a, b;
while(~scanf("%d", &n)){
ans = 1;
init();
while(n--){
scanf("%d%d", &a, &b);
uni(a, b);
}
printf("%d\n", ans);
}
return 0;
}