hdu1856基础并查集

版权声明:转就转吧~~记得声明噢~~ 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;
}

猜你喜欢

转载自blog.csdn.net/Soul_97/article/details/82911767