zoukankan      html  css  js  c++  java
  • HDU_1856_带权并查集

    有10000000个同学,他们之间可能是直接朋友或者间接朋友,问最大的朋友圈有多少人。

    一直觉得10000000的数组开不了,用map优化了一下,结果能开,且10000000也不会超时。。。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<queue>
    #include<algorithm>
    #include<map>
    using namespace std;
    #define N 200005
     
    int father[N];
    int number[N];
     
    int findFa(int num)
    {
        if(father[num]!=num)
            father[num]=findFa(father[num]);
        return father[num];
    }
     
    void Merge(int a,int b)
    {
        int fa=findFa(a);
        int fb=findFa(b);
        if(fa!=fb)
        {
            father[fa]=fb;
            number[fb]+=number[fa];
        }
    }
     
    map<int,int> ma;
    int size;
    int main()
    {
        int n;
        while(scanf("%d",&n)!=EOF)
        {
            size=1;
            ma.clear();
            for(int i=0; i<=N; i++)
            {
                father[i]=i;
                number[i]=1;
            }
            for(int i=0; i<n; i++)
            {
                int a,b;
                scanf("%d%d",&a,&b);
                if(ma[a]==0)
                    ma[a]=size++;
                if(ma[b]==0)
                    ma[b]=size++;
                Merge(ma[a],ma[b]);
            }
            int res=0;
            for(int i=1; i<=N; i++)
            {
                //if(i<10)
                //  cout<<number[i]<<" ";
                if(father[i]==i)
                    res=max(res,number[i]);
            }
            printf("%d
    ",res);
        }
        return 0;
    }
  • 相关阅读:
    新人讲解
    为人处世
    项目管理
    读书
    游戏
    总结反思
    地图相关
    产品经理
    摄影
    Java 邮件发送
  • 原文地址:https://www.cnblogs.com/jasonlixuetao/p/8563235.html
Copyright © 2011-2022 走看看