并查集

#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;

const int MAX = 100005;

int father[MAX]; // 节点的父节点

void init() // 初始化
{
    for(int i = 0; i < MAX; i++) father[i] = i; //每个节点构成一个只有该节点的集,彼此无联系
}

int finds_r(int x) // 递归形式的父节点查找
{
    if(father[x] != x) father[x] = finds_r(father[x]); // 并查集的路径压缩,使所有该链上的节点指向唯一父节点
    return father[x];
}

int finds_l(int x) // 循环形式的查找
{
    int f, pf;
    f = x;
    while(x != father[x]) x = father[x];// 找到最终的父节点
    while(f != x)
    {
        pf = father[f];
        father[f] = x; // 更新路径上所有节点的父节点信息
        f = pf;
    }
    return x;
}

int unions(int x, int y) // 合并x,y所在的集
{
    int p = finds_l(x);
    int q = finds_r(y); // 找到x,y的最终父节点
    if(p != q) father[p] = q; // 将p所在集的所有节点并入q所在集中
}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 并查集原理我将举一个更有爱的例子。 话说江湖上散落着各式各样的大侠,有上千个之多。他们没有什么正当职业,整天背着剑...
    扎Zn了老Fe阅读 618评论 0 0
  • 并查集 并查集是什么 并查集是一种用来管理元素分组情况的数据结构,并查集可以高效地进行如下操作: 查询元素a和元素...
    周九九丶阅读 4,098评论 1 2
  • 并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同...
    zxx901221阅读 549评论 0 0
  • 我认识一位朋友,她身上有一种品质让我特别佩服,就是隐忍。她和老公的兄弟姐妹较多,所以她的家庭成员关系也较复杂...
    营养私教西西阅读 187评论 0 0
  • 上半年过得可真快啊!看到群友们都在晒自己的总结,我也好好的梳理了一下。 1.二月份加入行动派后,加入大咖训练营。收...
    MAY聆听诗语阅读 244评论 2 3

友情链接更多精彩内容