zoukankan      html  css  js  c++  java
  • HDU 1856 More is better

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

    题意:

    王先生想要一些男孩帮助他做一个项目。因为项目相当复杂,男孩越多,越好。当然有一定的要求。
    王先生选择了一个足够大的房间来容纳男孩。没有被选中的男孩必须立即离开房间。有10000000的男孩在房间号从1到10000000在一开始。王先生选择后,仍然在这个房间里的任何两个人应该是朋友(直接或间接),或者只剩下一个男孩。给定所有的直接朋友对,你应该决定最好的方法。

    思路:

    并查集。选出顶点数最多的并输出。

     1 #include<iostream> 
     2 #include<cstring>
     3 #include<algorithm>
     4 using namespace std;
     5 
     6 #define N 10000000
     7 
     8 int p[N], num[N], maxd;
     9 
    10 void init()
    11 {
    12     int i;
    13     for (i = 1; i <= N; i++)
    14     {
    15         p[i] = i;
    16         num[i] = 1;
    17     }
    18 }
    19 
    20 int find(int x) 
    21 {
    22     if (p[x] != x)
    23         p[x] = find(p[x]);
    24     return p[x];
    25 }
    26 
    27 void merge(int a, int b)
    28 {
    29     int x = find(a);
    30     int y = find(b);
    31     if (x != y)
    32     {
    33         p[x] = y;
    34         num[y] += num[x];
    35         maxd = max(maxd, num[y]);
    36     }
    37 }
    38 
    39 int main()
    40 {
    41     //freopen("D:\txt.txt", "r", stdin);
    42     int n, a, b;
    43     while (~scanf("%d", &n))
    44     {
    45         if (n == 0)
    46         {
    47             printf("1
    ");
    48             continue;
    49         }
    50         maxd = 0;
    51         init();
    52         for (int i = 0; i<n; i++)
    53         {
    54             scanf("%d%d", &a, &b);
    55             merge(a, b);
    56         }
    57         printf("%d
    ", maxd);
    58     }
    59     return 0;
    60 }
  • 相关阅读:
    任正非用人:砍掉高层手脚、中层屁股、基层脑袋、全身赘肉!
    SourceTree的基本使用
    Spring学习(三)
    Spring学习(二)
    Spring学习(一)
    SpringBoot学习(五)
    SpringBoot学习(四)
    SpringBoot学习(二)
    SpringBoot学习(三)
    SpringBoot学习(一)
  • 原文地址:https://www.cnblogs.com/zyb993963526/p/6386848.html
Copyright © 2011-2022 走看看