zoukankan      html  css  js  c++  java
  • POJ1611基础带权并查集

    题意:
          有一个人生病了,和他一个社团或者间接和他有联系的人都会生病,问一共有多少人生病了。


    思路:
          比较简单和基础的题,带权并查集中的一种,就是记录更新集合元素个数,这个题目我是开始的时候每个人自己在自己的集合里,元素个数是1,然后在多开出来m个集合,让第i个社团直接映射到i+n个集合,元素个数一开始是0,然后就是简单更新了,还有就是注意下两个人已经属于同一个集合的时候就直接跳过,不用处理。


    #include<stdio.h>
    #include<string.h>


    #define N 30000 + 500 + 10


    int mer[N] ,sum[N];


    int finds(int x)
    {
        return x == mer[x] ? x : mer[x] = finds(mer[x]);
    }


    int main ()
    {
        int n ,m ,i ,a ,k;
        while(~scanf("%d %d" ,&n ,&m) && n + m)
        {
            for(i = 1 ;i <= n + m ;i ++)
            {
                if(i <= n) sum[i] = 1;
                else sum[i] = 0;
                mer[i] = i;
            }
            for(i = 1 ;i <= m ;i ++)
            {
                scanf("%d" ,&k);
                int y = finds(i+n);
                while(k--)
                {
                    scanf("%d" ,&a);
                    ++a;
                    int x = finds(a);
                    if(x == y) continue;
                    mer[x] = y;
                    sum[y] += sum[x];
                }
            }
            int x = finds(1);
            printf("%d " ,sum[x]);
        }
        return 0;
    }









  • 相关阅读:
    wepy ——$apply
    sql常用内置函数
    创建数据表
    wepy —— 组件之间通信
    sql表连接 —— join
    mongo int类型 数据 变成float
    修改Windows 2003的邮件服务器的最大附件限制
    让google.COM不再自动跳转到.CN
    [转载]浮点数在计算机中存储方式
    [转载]内存分配 知识,全局,局部,静态变量
  • 原文地址:https://www.cnblogs.com/csnd/p/12062511.html
Copyright © 2011-2022 走看看