zoukankan      html  css  js  c++  java
  • hdu 1856 more is better(并查集基础)

    http://acm.hdu.edu.cn/showproblem.php?pid=1856

    题意:有n 对小朋友 两两彼此认识

            如果间接认识也可认为认识

            问最多能有多人人认识

            (注意:在n==0时 ans=1)

    思路: 通过并查集合并

             并在父节点记录朋友个数        

    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    #include<iostream>
    #include<algorithm>
    #include<queue>
    #include<stack>
    #define mem(a,b) memset(a,b,sizeof(a))
    #define ll __int64
    #define MAXN 1000
    #define INF 0x7ffffff
    using namespace std;
    int maxx;
    struct Children
    {
        int coun;
        int father;
    };
    Children c[10000005];
    int find(int a)
    {
        int temp=a;
        while(temp!=c[temp].father)
        {
            temp=c[temp].father;
        }
        c[a].father=temp;
        return temp;
        //return c[a].father==a?a:find(c[a].father); 感觉这种写法更加简练 
    }
    void Union(int a,int b)
    {
        int x=find(a);
        int y=find(b);
        if(x==y) return ;
        c[y].father=c[x].father;
        c[x].coun+=c[y].coun;
        if(maxx<c[x].coun) maxx=c[x].coun;
    }
    int main()
    {
        int n,i,j,a,b;
        while(scanf("%d",&n)!=EOF)
        {
            if(n==0) {cout<<1<<endl;continue;}
            maxx=0;
            for(i=1;i<=10000000;i++)//初始化并查集
            {
               c[i].coun=1;
               c[i].father=i;
            }
            for(i=1;i<=n;i++)
            {
                scanf("%d%d",&a,&b);
                Union(a,b);
            }
            printf("%d
    ",maxx);
        }
        return 0;
    }
    

      

  • 相关阅读:
    mysql8 JDBC连接注意事项
    Flask上下文管理源码分析
    python基础学习day5
    python基础学习day4
    python基础学习day3
    python基础学习day2
    python基础学习day1
    简单的名片管理系统
    pycharm教程
    Python:知识目录
  • 原文地址:https://www.cnblogs.com/sola1994/p/3901826.html
Copyright © 2011-2022 走看看