• 并查集


    简单说明:并查集(union-find set),根据字面意思可以理解为在N个元素中,将属于同一组元素所在的集合合并,期间要反复查找一个元素在哪个集合中,即并+查。处理这类问题时便可以用到这种特殊的数据结构,保证了空间时间不会超过限制。

    并查集是一种抽象的数据结构,其本身不具有结构,必须借助一定的数据结构才能够实现,一般可以用数据,链表和树来实现,下面呈现的是用数组实现的方法。

    在实现过程中,每一个元素需要进行的操作可以分为以下三步:

    (1)、MAKE(x):建立一个新的集合,其仅有的成员就是x,也就是初始化的过程;

    (2)、UNION(x,y):将包含元素x和元素y的动态集合合并成一个新的集合;

    (3)、FIND(x):返回一个指向包含x集合的代表;

    code:

     1 for(int i=1;i<=n;i++)
     2   father[i]=i;              //初始化
     3 
     4 int find(int x){
     5   if(father[x]!=x) father[x]=find(father[x]);
     6 return father[x];         //压缩路径,减少事件复杂度
     7 }                               //查询
     8 
     9 void union(int x,int y){
    10   x=find(x);
    11   y=find(y);
    12   father[y]=x;
    13 }                               //合并
  • 相关阅读:
    NOIP2018 模拟赛(二十二)雅礼NOI
    浅谈左偏树在OI中的应用
    HDU3062&&HDU1814
    2-SAT超入门讲解
    bitset常用用法&&简单题分析
    NOIp2014提高组初赛错题简析
    2018十月刷题列表
    BZOJ 4804: 欧拉心算
    Luogu P2568 GCD
    Luogu P4137 Rmq Problem / mex
  • 原文地址:https://www.cnblogs.com/uncklesam7/p/9090810.html
Copyright © 2020-2023  润新知