数据结构--并查集(Disjoint-Set)

文章目录

    • 1. 并查集
    • 2. 操作
      • 2.1 初始化
      • 2.2 查询
      • 2.3 合并
      • 2.4 孤立
    • 3. 完整代码
    • 4. 相关题目
    • 5. 参考

1. 并查集

  • 并查集是一种树型的数据结构
  • 用于处理一些不相交集合(Disjoint Sets)的合并及查询问题

2. 操作

2.1 初始化

把每个点所在集合初始化为其自身,时间复杂度均为O(N),可用数组,哈希表等结构来实现

for(int i = 0; i < n; i++) father[i] = i;

2.2 查询

查找元素所在的集合(找一个代表),即根节点
有的时候,树的高度太高,压缩树的高度,直接让底层节点的father指向root,称之路径压缩

在这里插入图片描述

int uniFind(int x)
{if(x == father[x]) return x;return father[x] = uniFind(father[x]);//等式为路径压缩操作
}

or 循环

int uniFind(int a)//循环+路径压缩{int origin = a;while(a != f[a])a = f[a];return f[origin] = a;//路径压缩}

2.3 合并

将两个元素所在的集合合并为一个集合
合并之前,先判断两个元素是否属于同一集合,用上面的uniFind操作实现

在这里插入图片描述

void merge(int x, int y)
{int fatherx = uniFind(x);int fathery = uniFind(y);if(fatherx != fathery) father[fatherx] = fathery;
}

2.4 孤立

father[a] = a;

相关题目 LeetCode 5941. 找出知晓秘密的所有专家(并查集)

3. 完整代码

/*** @Description: 并查集* @Author: michael ming* @Date: 2020/4/3 16:14* @Modified by: * @Website: https://michael.blog.csdn.net/*/
#include<bits/stdc++.h>
using namespace std;
const int n = 10;
int father[n] = {0,1,2,3,4,5,6,7,8,9};
void init()
{for(int i = 0; i < n; i++)father[i] = i;
};
int uniFind(int x)
{if(x == father[x])return x;return father[x] = uniFind(father[x]);//等式为路径压缩操作
}
void merge(int x, int y)
{int fatherx = uniFind(x);int fathery = uniFind(y);if(fatherx != fathery)father[fatherx] = fathery;
}
int main()
{init();merge(1,2);cout << "1的代表" << uniFind(1) << endl;cout << "2的代表" << uniFind(2) << endl;cout << "0的代表" << uniFind(0) << endl;merge(0,1);cout << "0的代表" << uniFind(0) << endl;return 0;
}

运行结果:

1的代表2
2的代表2
0的代表0
0的代表2

4. 相关题目

LeetCode 261. 以图判树(全部连通+边数=V-1)
LeetCode 305. 岛屿数量 II(并查集)
LeetCode 323. 无向图中连通分量的数目(并查集)
LeetCode 684. 冗余连接(并查集)
LeetCode 685. 冗余连接 II(并查集)
LeetCode 721. 账户合并(并查集)(字符串合并)
LeetCode 737. 句子相似性 II(并查集)
LeetCode 803. 打砖块(并查集 + 带size记录)*
LeetCode 839. 相似字符串组(并查集)
LeetCode 886. 可能的二分法(着色DFS/BFS/拓展并查集)
LeetCode 947. 移除最多的同行或同列石头(并查集)
LeetCode 990. 等式方程的可满足性(并查集)
LeetCode 959. 由斜杠划分区域(并查集)
LeetCode 1061. 按字典序排列最小的等效字符串(并查集)
LeetCode 1101. 彼此熟识的最早时间(排序+并查集)
LeetCode 1135. 最低成本联通所有城市(最小生成树+排序+并查集)
LeetCode 1202. 交换字符串中的元素(并查集)
LeetCode 1319. 连通网络的操作次数(BFS/DFS/并查集)
LeetCode 1489. 找到最小生成树里的关键边和伪关键边(并查集+kruskal最小生成树)
LeetCode 5510. 保证图可完全遍历(并查集)
LeetCode 5632. 检查边长度限制的路径是否存在(排序+并查集)
LeetCode 5650. 执行交换操作后的最小汉明距离(并查集)
程序员面试金典 - 面试题 17.07. 婴儿名字(并查集)
LeetCode 2076. 处理含限制条件的好友请求(并查集)
LeetCode 5941. 找出知晓秘密的所有专家(并查集)

5. 参考

  • 并查集
  • 百度百科

我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/476748.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

推特裁员大反转!马斯克哭求被裁员工回来

编 | Aeneas 好困源 | 新智元马斯克裁完一半员工后&#xff0c;发现推特运转不了了&#xff0c;现在正哭求一些人回来&#xff0c;堪称爽文情节了。打脸大戏来了&#xff01;马斯克在上周五「灭掉」一半员工后&#xff0c;就后悔了。现在公司正在紧急联系数十名被裁的员工&…

Visual Studio 2008 Shell(翻译)

如果你现在在创建软件开发工具&#xff0c;你现在可以选择基于Visual Studio 2008 Shell。一个流行的Visual Studio 开发环境&#xff0c;Visual Studio Shell提供了一些核心功能&#xff0c;使你能够创建独一无二的应用程序&#xff0c;弹性的自定义能力帮助你推出更加特别的产…

word删除分节符后之前的格式乱了_办公室高级技能之Word邮件合并拆分

当我们需要批量生成名片&#xff0c;合同&#xff0c;成绩单等有相同内容的文件时&#xff0c;使用word邮件合并功能非常方便。如果你还需要把word文件发给不同的人就需要再拆分一下&#xff0c;用复制粘贴的方法拆分word&#xff0c;数量一多不仅效率低&#xff0c;还会因为文…

程序员面试金典 - 面试题 16.24. 数对和(双指针/哈希map)

文章目录1. 题目2. 解题2.1 排序双指针2.2 哈希map1. 题目 设计一个算法&#xff0c;找出数组中两数之和为指定值的所有整数对。一个数只能属于一个数对。 示例 1: 输入: nums [5,6,5], target 11 输出: [[5,6]]示例 2: 输入: nums [5,6,5,6], target 11 输出: [[5,6],[5…

ICLR 2023 最高分论文被锤抄袭??

文 | 智商掉了一地究竟是Git Clone还是Git Re-Basin&#xff1f;被评论区长文石锤&#xff01;如上图所示&#xff0c;ICLR 2023 官方近期正式宣布评审工作已结束&#xff0c;评分最高的 Git Re-Basin 这项神经网络启发性新研究探索了在深度学习中&#xff0c;SGD算法在高维非凸…

新浪的图片新闻效果

<html><head><title>新浪的图片新闻效果</title><meta http-equiv"Content-Type"content"text/html; charsetgb2312"></head><body bgcolor"#FFFFFF"text"#000000"><p> </p>&l…

机器学习方法_机器学习模型应用方法综述

文章发布于公号【数智物语】 &#xff08;ID&#xff1a;decision_engine&#xff09;&#xff0c;关注公号不错过每一篇干货。来源 | 数据派THU&#xff08;id&#xff1a;DatapiTHU&#xff09;作者&#xff1a;Julien Kervizic翻译&#xff1a;陈之炎 校对&#xff1a;李海明…

程序员面试金典 - 面试题 16.21. 交换和(哈希set)

1. 题目 给定两个整数数组&#xff0c;请交换一对数值&#xff08;每个数组中取一个数值&#xff09;&#xff0c;使得两个数组所有元素的和相等。 返回一个数组&#xff0c;第一个元素是第一个数组中要交换的元素&#xff0c;第二个元素是第二个数组中要交换的元素。 若有多…

来,教你成为科研卷王

作为曾经熬通宵肝论文的过来人&#xff0c;小编要吐槽&#xff0c;论文写久了真的会头秃&#xff0c;尤其是确定选题和创新点的时候&#xff0c;是薅头发事件的高发阶段。对于那些导师放养、在自己的摸索中磕磕绊绊前行的科研新手们&#xff0c;焦虑总是瞅准时机就扑面而来——…

DEBUG主要命令(转)

1、如何调用DEBUG程序语法格式&#xff1a;DEBUG &#xff3b;驱动器名&#xff1a;&#xff3d;&#xff3b;路径&#xff3d;&#xff3b;文件名&#xff3d;如有文件名&#xff0c;则将指定的文件调入内存。如命令中没有指定文件名&#xff0c;则DEBUG可以与正在内存中的内…

python手机编译器可以干什么_Python是什么?Python学习用哪些编译器?

Python是什么&#xff1f;Python是一个非常好用的程序语言&#xff0c;开发的速度非常快。Python的设计哲学是优雅、明确、简单。因此&#xff0c;Perl语言中总是有多种方法来做同一件事的理念在Python开发者中通常是难以忍受的。 Python开发者的哲学是用一种方法&#xff0c;最…

程序员面试金典 - 面试题 16.16. 部分排序(排序/不排序)

文章目录1. 题目2. 解题2.1 排序2.2 不排序1. 题目 给定一个整数数组&#xff0c;编写一个函数&#xff0c;找出索引 m 和 n &#xff0c;只要将索引区间 [m,n] 的元素排好序&#xff0c;整个数组就是有序的。 注意&#xff1a;n-m 尽量最小&#xff0c;也就是说&#xff0c;找…

福州公交车与拖拉机相撞1人死亡

2007年7月3日下午17时许&#xff0c;福州地区大学新校区学园路路段发生一起交通事故。郑久忠(男&#xff0c;35岁&#xff0c;鼓楼区八一七中路734号弄一号)驾驶41路公交车沿学园路由北往南行驶&#xff0c;途经厚庭路和学园路交叉路口&#xff0c;与林亮(男&#xff0c;34岁&a…

综述|视觉Transformer在CV中的现状、趋势和未来方向

文 | 汽车人源 | 自动驾驶之心摘要Transformer&#xff0c;一种基于注意力的编码器-解码器模型&#xff0c;已经彻底改变了自然语言处理&#xff08;NLP&#xff09;领域。受这些重大成就的启发&#xff0c;最近在计算机视觉&#xff08;CV&#xff09;领域采用类似Transformer…

python变量定义问题_python 定义n个变量方法 (变量声明自动化)

python 定义n个变量方法 (变量声明自动化) code&#xff1a; for i in range(100): cmd "t%s 1" % i exec cmd eval("t%s" % i) print t10 输出 1 &#xff0c; 表示我们创建了 t0 - t99 这样的变量 以上这篇python 定义n个变量方法 (变量声明自动化)就是…

CodeFileBaseClass 属性

asp.net 2.0 中&#xff0c;今天遇到了一个错误&#xff1a;Make sure that the class defined in this code file matches the inherits attribute, and that it extends the correct base class (e.g. Page or UserControl)原因是我的 CodeBehind 类继承了自定义的页面基类。…

程序员面试金典 - 面试题 10.03. 搜索旋转数组(二分查找)

1. 题目 搜索旋转数组。给定一个排序后的数组&#xff0c;包含n个整数&#xff0c;但这个数组已被旋转过很多次了&#xff0c;次数不详。 请编写代码找出数组中的某个元素&#xff0c;假设数组元素原先是按升序排列的。若有多个相同元素&#xff0c;返回索引值最小的一个。 示…

强化学习,商业化之路宣告死亡了吗?

文 | Shona继DeepMind推出AlphaGo已过去7年&#xff0c;强化学习在游戏行业有了不少应用&#xff0c;例如游戏陪玩、AI托管等。在这过程中&#xff0c;越来越多的公司 / 研究院所为强化学习的研究投入了大量的资源与精力。随之而来的&#xff0c;也有不少质疑&#xff0c;不少人…

转usb驱动cmw500 ni_支持USB Type-C接口的外置蓝光驱动器IO Data BRP-UT6 / MC2本月发售...

IO Data以其非正统的数据设备闻名&#xff0c;最近IO Data新推出了一款支持USB Type-C接口的外置超薄蓝光驱动器设备 BRP-UT6 / MC2&#xff0c;除了支持USB-C接口&#xff0c;其配置是非常标准的超薄外置蓝光光驱规格&#xff0c;支持最新的BDXL和M-DISC规格&#xff0c;附赠M…

ajax缓存处理

最近写程序是发现,使用ajax的时候,有时候既然不能访问请求页面了,压根就不走后台代码了.........测试了很久,发现应该是缓存的问题:可以在前台异步调用是加上:xmlHTTP.setRequestHeader("If-Modified-Since","0");或者如果你的后台请求页面是一个.aspx页面…