版权声明:转就转吧~~记得声明噢~~ https://blog.csdn.net/Soul_97/article/details/82911767
http://acm.hdu.edu.cn/showproblem.php?pid=1856
除了找爸爸数组之外,再设置一个朋友圈数组,每次都判断两个人是否在一个朋友圈,如果不在,则加上对方朋友圈的人数
#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const int N = 10000000 + 5;
const int M = 5e5 + 5;
int fa[N], p[N];
int n;
int Find(int k){
if(k != fa[k])
fa[k] = Find(fa[k]);
return fa[k];
}
int main()
{
while(~scanf("%d",&n)){
for(int i = 0;i < N;i ++)
fa[i] = i, p[i] = 1;
int a, b;
int min_ = N, max_ = 0;
for(int i = 1;i <= n;i ++){
scanf("%d%d",&a,&b);
a = Find(a);
b = Find(b);
if(a != b){
fa[b] = a;
p[a] += p[b];
}
min_ = min(min_, min(a,b));
max_ = max(max_,max(a,b));
}
int res = 1;
for(int i = min_;i <= max_;i ++){
if(p[i] > res)
res = p[i];
}
printf("%d\n",res);
}
return 0;
}