【算法日志】图论 并查集及其简单应用

【算法日志】图论: 并查集及其简单应用

并查集概论

并查集是一种算法设计思想,通过判断两个元素是否在同一个集合里,常用来解决一些和图相关的连通性问题。

并查集主要有以下两个功能:

  • 将两个元素添加到一个集合中。
  • 判断两个元素是否是在一个集合之中(这一功能够有效判断是否成环)。

主要思想:

通过创建一个数组用来保每个点的最老根节点,以此来实现并查集的各种功能。

具体模板如下:

int n = 1005; // n根据题目中节点数量而定,一般比节点数量大一点就好
vector<int> father = vector<int> (n, 0); // C++里的一种数组结构
// 并查集初始化
void init() {for (int i = 0; i < n; ++i) {father[i] = i;}
}
// 并查集里寻根的过程
int find(int u) {return u == father[u] ? u : father[u] = find(father[u]); // 路径压缩
}
// 判断 u 和 v是否找到同一个根
bool isSame(int u, int v) {u = find(u);v = find(v);return u == v;
}
// 将v->u 这条边加入并查集
void join(int u, int v) {u = find(u); // 寻找u的根v = find(v); // 寻找v的根if (u == v) return ; // 如果发现根相同,则说明在一个集合,不用两个节点相连直接返回father[v] = u;
}

简单应用

leetcode 1971:寻找是否存在路径

本题是双向图,只要始末点相连就存在有效路径,因此只需要将合并树,判断始末节点的最老根节点是否一样就行。

具体示例代码如下:

	void Init(vector<int>& f, const int& n){for (int i = 0; i < n; ++i)f[i] = i;}int find(vector<int>& f, int v){return v == f[v] ? v : find(f, f[v]);}bool isSame(vector<int>& f, int v, int u){v = find(f, v);u = find(f, u);return v == u;}void join(vector<int>& f, int v, int u){v = find(f, v);u = find(f, u);if (v != u)f[u] = v;}bool validPath(int n, vector<vector<int>>& edges, int source, int destination){vector<vector<int>> path;vector<int> father(n + 1, 0);Init(father, n + 1);int size = edges.size();for (int i = 0; i < size; ++i)join(father, edges[i][0], edges[i][1]);return isSame(father, source, destination);}
leetcode 648: 冗余连接

本题要连接的点在连接前存在共同根节点,那么连接该两点就会形成环路,因此需要移除的边就是以这两点为端点的边。

具体示例代码如下:

	void Init(vector<int>& f, const int& n){for (int i = 0; i < n; ++i)f[i] = i;}int find(vector<int>& f, int v){return v == f[v] ? v : find(f, f[v]);}bool isSame(vector<int>& f, int v, int u){v = find(f, v);u = find(f, u);return v == u;}void join(vector<int>& f, int v, int u){v = find(f, v);u = find(f, u);if (v != u)f[u] = v;}vector<int> findRedundantConnection(vector<vector<int>>& edges){int n = edges.size();vector<int> father(n + 1, 0);Init(father, n + 1);for (int i = 0; i < n; ++i){if (isSame(father, edges[i][0], edges[i][1]))return { edges[i][0], edges[i][1] };join(father, edges[i][0], edges[i][1]);}return {};}

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

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

相关文章

代码模版-实现重置按钮清空表单数据,vue+elementUI

文章目录 界面代码 界面 页面上可能会有「搜索」按钮 也会有「重置」按钮 重置 btn 的作用是为了清空前面 form 表单中的数据 代码 我们使用 elementUI vue 来做 解释&#xff1a;我们在 el-form 组件中加上 ref"searchFormRef"&#xff0c;后续 js 中通过 thi…

Web之JavaScript(jQuery)笔记

Web之HTML、CSS、JavaScript 三、JavaScriptJS调试变量自定义函数数据类型及转换运算符优先级内置函数数组事件DOM(Document Object Model 文档对象模型)jQuery Web之HTML笔记 Web之CSS笔记 三、JavaScript JavaScript&#xff08;简称“JS”&#xff09;是一种轻量级的面向对…

element-ui中怎样使用iconfont的图标

1 登录 https://www.iconfont.cn/ 2 搜索合适的图 这里可以找到这个图所在的图库。这样就可以一次查找到对应的所有同款图标 3 选择同款加入购物车 4 将购物车的icon加入项目&#xff0c;注意是新建项目&#xff0c;除非你是确定需要前面已经加过的icon 5 下载icon 选择fon…

CentOS7安装xvfb,解决服务器没有X-Server的问题

Linux服务器上一般没有图形界面,但是有时候有些软件又需要图形界面.比如oracle,自动化测试(puppeteer).运行的时候会提示没有没有X服务. 这时候一般不会去特地装图形界面.这个时候就要用xvfb来创建虚拟图形窗口. xvfb介绍 Xvfb(X Virtual Frame Buffer)是基于X Window的虚拟服…

麒麟系统安装找不到安装源!!!!设置基础软件仓库时出错

记录--华为RH2288 V3服务器安装麒麟系统遇到的问题 1.遇到的问题--“设置基础软件仓库时出错”报错导致无法继续安装 没办法下一步 先说结论&#xff1a;系统bug 该问题在CentOS、Rocky Linux最新版中均存在 解决&#xff1a; &#xff08;一&#xff09;、如果是外网直接配…

github 开源whisper ros llm

GitHub - openai/whisper: Robust Speech Recognition via Large-Scale Weak Supervision openai whisper ROS LLM https://github.com/Auromix/ROS-LLM/tree/ros2-humble/llm_input

c# 设计一个图书管理系统

设计一个简单的图书管理系统&#xff0c;包括以下类&#xff1a; 1、Book 类&#xff1a;表示一本图书&#xff0c;包括图书编号、书名、作者、出版日期等属性。 2、Library 类&#xff1a;表示图书馆&#xff0c;包括一个图书列表&#xff0c;可以添加图书、借出图书、归还图…

PHP字符串函数的解析

在PHP中&#xff0c;字符串是一种常见的数据类型&#xff0c;用于存储和操作文本数据。PHP提供了丰富的字符串函数&#xff0c;用于执行各种字符串操作&#xff0c;包括截取、连接、替换、搜索等。在这篇文章中&#xff0c;我们将深入解析一些常用的PHP字符串函数&#xff0c;以…

京东API接口获取京东平台商品详情数据,SKU,价格参数及其返回值说明

做过淘客开发的一定接触过淘宝API开发。 而做京东联盟软件自然离不开京东联盟API。 京东联盟API目前上线的有很多。 参数说明 通用参数说明 url说明 https://api-gw.onebound.cn/平台/API类型/ 平台&#xff1a;淘宝&#xff0c;京东等&#xff0c; API类型:[item_search,ite…

docker 部署mysql主从复制

一&#xff1a;环境准备 1&#xff1a;创建mysql主库镜像 docker run -p 3307:3306 --name mysql_m \ -v /opt/mysql_m/log:/var/log/mysql \ -v /opt/mysql_m/data:/var/lib/mysql \ -v /opt/mysql_m/conf:/etc/mysql \ -e MYSQL_ROOT_PASSWORD123456 \ -d mysql:5.7 2&…

什么是统一数据存储?

什么是统一数据存储&#xff1f; 二十多年前&#xff0c;NetApp 在业内推出了统一存储。如今&#xff0c;NetApp 已将统一数据存储的定义扩展到一个完整的生态系统&#xff0c;该生态系统支持在一个通用操作系统中处理文件、块和对象工作负载&#xff0c;而该操作系统横跨多个…

【揭秘】MySQL逻辑架构:一文带你全面了解!

mysql是我们开发过程中使用的最多的数据库&#xff0c;大多数程序员平时都是做CRUD&#xff0c;如果CRUD慢了&#xff0c;那就再加一个索引&#xff0c;如果加上索引还不行&#xff0c;那基本上开发就没辙了&#xff0c;因为对mysql内部理解不深入、不清晰&#xff0c;所以问题…

Ps:变换

可以向选区、整个图层、多个图层或图层蒙版应用变换 Transform&#xff0c;还可以向路径、矢量形状、矢量蒙版、选区边界或 Alpha 通道应用变换。 若要变换栅格&#xff08;像素&#xff09;图像&#xff0c;建议先将其转换为智能对象&#xff0c;以便进行非破坏性的变换。 Ps菜…

论文-分布式-拜占庭将军问题

目录 0-前言 1-导引 2-不可能性 3将军(1叛徒)问题不存在解/不能达成共识 少于3m1个将军(有m个叛徒)不存在解/不能达成共识 精确一致性与近似一致性是同等困难的 3-使用口头消息的解 “口头消息”的含义 OM(m)算法的步骤 OM(m)算法的正确性推导 4-使用签名消息情况下…

uni-app顶部导航栏背景色如何设置,微信小程序返回键设置

百度经验 https://jingyan.baidu.com/article/67508eb48c5c37dcca1ce499.html 这样设置微信小程序没有返回键 {"path": "pages/index/index","style": {"navigationBarTitleText": "首页","app-plus": {"ti…

Flutter在web项目中使用iframe

需要把原来的app项目移植到web上面&#xff0c;在app中使用的是flutter_inappwebview这个库&#xff0c;推荐使用这个库&#xff0c;因为修复了一部分webview_flutter中存在的问题 在web项目中flutter_inappwebview这个库不支持&#xff0c;所以需要自己封装一个web项目中的we…

尽快调整心态,切莫自讨苦吃

退休多年的老龄人的本“人民体验官”闲得无聊&#xff0c;怕被闲出更多病痛&#xff0c;更怕被闲死&#xff0c;所以天天上网坚持职业新闻人的老习惯——上网读新闻&#xff0c;并以一孔之见置评&#xff0c;旨在抛砖引玉。 11月8日&#xff0c;本“人民体验官 ”在推广人民日…

mysql主从搭建(docker)

一、主从概述 MySQL主从又叫Replication、AB复制。简单讲就是A与B两台机器做主从后&#xff0c;在A上写数据&#xff0c;另外一台B也会跟着写数据&#xff0c;实现数据实时同步。有这样几个关键点&#xff1a; 1&#xff09;MySQL主从是基于binlog&#xff0c;主上需开启binl…

debian10 开启rdp安装firefox,firefox 中文乱码

debian10 开启rdp安装firefox apt -y install tigervnc-standalone-server apt -y install xrdp tigervnc-standalone-server systemctl enable xrdpapt install firefox-esrmstsc连接 firefox-settings-general-fonts-advanced-Simplified Chinese

java Bigdecimal

一、BigDecimal概述 BigDecimal是Java在java.math包中提供的线程安全的API类&#xff0c;用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数&#xff0c;但在实际应用中&#xff0c;可能需要对更大或者更小的数进行运算和处理。一般情况下&am…