zoukankan      html  css  js  c++  java
  • POJ1611-The Suspects-并查集

    记录元素个数的并查集。

    利用sz数组保存并查集的大小。每次union时,把小的集合并到大的中去,并更新sz数组。

    #include <cstdio>
    #include <algorithm>
    
    using namespace std;
    
    int n,m,k;
    
    int fa[30010],sz[30010];
    
    int Find(int x)
    {
        while(x != fa[x])
        {
            fa[x] = fa[fa[x]];
            x = fa[x];
        }
        return x;
    }
    
    void Union(int p,int q)
    {
        int fp = Find(p),fq = Find(q);
        if(fp == fq) return;
        if(sz[fp] < sz[fq])
        {
            fa[fp] = fq;
            sz[fq] += sz[fp];
        }
        else
        {
            fa[fq] = fp;
            sz[fp] += sz[fq];
        }
    }
    
    int main()
    {
        while(scanf("%d%d",&n,&m) && (n||m))
        {
            for(int i=0;i<n;i++)
            {
                fa[i] = i;
                sz[i] = 1;
            }
            for(int i=0;i<m;i++)
            {
                scanf("%d",&k);
                int root = 0,p;
                for(int i=0;i<k;i++)
                {
                    scanf("%d",&p);
                    if(!i) root = p;
                    else Union(p,root);
                }
            }
            printf("%d
    ",sz[Find(0)]);
        }
    }
  • 相关阅读:
    Yii隐藏单入口
    JS字符串的问题
    暑假第三测
    暑假第二测
    暑假第一测
    沈阳集训day4
    沈阳集训day3
    P2571 [SCOI2010]传送带
    CF626C Block Towers
    洛谷P4171 [JSOI2010]满汉全席
  • 原文地址:https://www.cnblogs.com/helica/p/5176588.html
Copyright © 2011-2022 走看看