zoukankan      html  css  js  c++  java
  • POJ 1611 The Suspects

    第一道并查集,听起来很高大上的样子,其实也不难理解

    我感觉并查集的精髓就在那个路径压缩上面,将叶子节点直接指向根

    并:将两个集合合并在一起

    查:查询某个元素是否在该集合中

    题意:已知0号同学染病了,那么和他同在一个集合的同学也都可能染病了,输出可能染病的总人数

    标准的并查集,模板题

     1 //#define LOCAL
     2 #include <iostream>
     3 #include <cstdio>
     4 #include <cstring>
     5 using namespace std;
     6 
     7 const int maxn = 30000 + 10;
     8 int total[maxn], parent[maxn];
     9 int n, m, k;
    10 
    11 int GetParent(int a)
    12 {
    13     if(parent[a] != a)
    14         parent[a] = GetParent(parent[a]);
    15     return parent[a];
    16 }
    17 
    18 void Merge(int a, int b)
    19 {
    20     int p1 = GetParent(a);
    21     int p2 = GetParent(b);
    22     if(p1 == p2)
    23         return;
    24     total[p1] += total[p2];
    25     parent[p2] = p1;
    26 }
    27 
    28 int main(void)
    29 {
    30     #ifdef LOCAL
    31         freopen("1611in.txt", "r", stdin);
    32     #endif
    33 
    34     while(scanf("%d%d", &n, &m) == 2 && (m+n))
    35     {
    36         for(int i = 0; i < n; ++i)
    37         {
    38             parent[i] = i;
    39             total[i] = 1;
    40         }
    41         for(int i = 0; i < m; ++i)
    42         {
    43             int h, s, t;
    44             scanf("%d%d", &h, &s);
    45             for(int j = 1; j < h; ++j)
    46             {
    47                 scanf("%d", &t);
    48                 Merge(s, t);
    49             }
    50         }
    51         printf("%d
    ", total[GetParent(0)]);
    52     }
    53     return 0;
    54 }
    代码君
  • 相关阅读:
    NTP服务器
    sublime中文设置
    13、软件定时器
    晶振和CPU周期
    红外通信协议
    KEIL使用时的一些配置
    STM32 的内部 FLASH
    STM32的程序下载
    2、触摸屏
    目录
  • 原文地址:https://www.cnblogs.com/AOQNRMGYXLMV/p/3931816.html
Copyright © 2011-2022 走看看