并查集详解

news/2024/4/24 5:19:23/文章来源:https://blog.csdn.net/ESTHERWXY/article/details/126929924

开始的时候,有n个人,他们想要组成团伙,规定只要一个人向团伙中的人喊了爸爸fa[b]=a,这个人就是团伙中的人了,(在一个集合中)但是呢,如果我们想查询两个人是否为同一团伙,就会有人喊爸爸,再喊爸爸的爸爸,再喊爸爸的爸爸的爸爸,查询的链条会变得很长,速度变慢,(可以看出,这实际上是一个树形结构)而我们对喊爸爸这个过程并不在意,所以我们就可以让所有人直接对一个团伙中指定的人喊爸爸(假设这个人变成祖宗)。->这就是压缩路径

int find(int k)
{if(f[k]==k)return k;return f[k]=find(f[k]);
}

如果我们想让两个并查集和并,也只要找到一个团伙的祖宗喊另一个团伙的祖宗爸爸

f[find(p2)]=find(p3);

在一个注意:

在查询两个元素是否在同一集合的时候,必须判断find(a)==find(b),而不是f[a]==f[b]

原因很简单一个路径压缩的时候,只是压缩了这个节点指向祖先的一条路,但是整个并查集是一个树形的结构,对于别的节点可能并没有(来得及)将它的f[]值直接指向祖先

当然也可以在所以问题询问之前把所有节点的f值都找一遍,这样更有利于理解,但是会慢

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int f[10010];
int find(int k)
{if(f[k]==k)return k;return f[k]=find(f[k]);
}
int main()
{int n,m,ans,p1,p2,p3,i;scanf("%d%d",&n,&m);for(i=1;i<=n;i++)f[i]=i;for(i=1;i<=m;i++){scanf("%d%d%d",&p1,&p2,&p3);if(p1==1)f[find(p2)]=find(p3);elseif(find(p2)==find(p3))printf("Y\n");elseprintf("N\n");}return 0;
}

例题:

【模板】并查集 - 洛谷

一中校运会之百米跑 - 洛谷   将并查集中的数组变成字符串,可以用hash,可以用map

备注:map 用法

定义:map<string,int> mp;  建立一个string 类型到int 类型的映射

map<typename1, typename2>::iterator it;  it就是一个迭代器

在这种情况下:映射前类型:string (键值k)  int (值value)

调用:a=mp(str)->返回与键值str对应的整数值value

常用函数:

  • find(key)返回键值为key的迭代器 it     it->first:键值   it->second:具体值  O(logN)
  • erase()  erase(key)  O(logN)  
    • erase(it)  O(1)
    • erase(key)  O(logN)
    • erase(first,last) O(last-first) 左闭右开

用于字符串和整数的映射

用于大数据 将map当成bool数组(最常用)

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

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

相关文章

C# 第九章『图形、图像』◆第4节:彩色图像处理

一、彩色图像变换灰度图像 1、彩色位图图像的颜色 图像像素的颜色由三种基本色&#xff0c;即红R、绿G、蓝B&#xff0c;称为三基色。每种基色可取0-255&#xff08;占用8个位&#xff0c;即1个字节&#xff09;&#xff0c;因此一个像素的颜色可以由三基色可组合成1677万种颜色…

解决Syntax Error: Error: No ESLint configuration found Syntax Error: TypeError: eslint.CLIEngine i问题

1.在项目中安装 ESLint :npm install eslint --save-dev 2.生成配置文件:./node_modules/.bin/eslint --init 3.初始化成功后,会在项目根目录生成一个 .eslintrc.js 文件,文件内容: module.exports = { "env": { "browser": true, "es2021"…

你不知道的 JavaScript ----作用域

编译原理 在传统编译语言的流程中&#xff0c;程序中的一段源代码在执行之前会经历三个步骤&#xff0c;统称为编译&#xff1a; 1.分词 / 词法分析&#xff1a;将字符串分解成有意义的代码块&#xff0c;这些代码块被称为词法单元&#xff08;token&#xff09; var a 2; …

由《羊了个羊》想到的高并发架构之路

由《羊了个羊》为话题切入点,结合自己的面试经历,详细讲解了高并发架构设计的演进过程!前言要说最近一段时间最火的话题是什么,那必定是《羊了个羊》,频频冲上微博热搜第一。因访问量骤增,大量玩家涌入进来,高并发流量导致游戏服务器被接连击穿。《羊了个羊》服务器几天…

【复习】maven

1.maven的概述 1.2 为什么需要maven 环境的构建 清理&#xff1a;删除上一次构建的结果&#xff0c;为下一次构建做好准备编译&#xff1a;Java源程序编译成*.class字节码文件测试&#xff1a;运行提前准备好的测试程序报告&#xff1a;针对刚才测试的结果生成一个全面的信息…

MQ 消息队列时如何确保消息不丢失

面试官在面试候选人时,如果发现候选人的简历中写了在项目中使用了 MQ 技术(如 Kafka、RabbitMQ、RocketMQ),基本都会抛出一个问题:在使用 MQ 的时候,怎么确保消息 100% 不丢失? 这个问题在实际工作中很常见,既能考察候选者对于 MQ 中间件技术的掌握程度,又能很好地区分…

大数据开发!Pandas转spark无痛指南!

&#x1f4a1; 作者&#xff1a;韩信子ShowMeAI &#x1f4d8; 大数据技术◉技能提升系列&#xff1a;https://www.showmeai.tech/tutorials/84 &#x1f4d8; 数据分析实战系列&#xff1a;https://www.showmeai.tech/tutorials/40 &#x1f4d8; 本文地址&#xff1a;https:/…

Runc 漏洞(CVE-2021-30465)离线修复

文章目录前言一、漏洞详情二、修复步骤2.1 下载离线包2.2 检查runc版本2.3 查看runc安装路径2.4 备份runc2.5 替换二进制文件2.6 检查版本前言 runC 是 Docker&#xff0c;Kubernetes 等依赖容器的应用程序的底层容器运行时。此次爆出的严重安全漏洞可使攻击者以 root 身份在主…

java并发编程学习六——乐观锁CAS

文章目录一、CAS原理1.1 无锁保护共享变量1.1.1 不安全模式实现1.1.2 有锁安全实现1.1.3 无锁安全实现1.2 cas工作方式1.3 CAS的效率和特点二、原子整数三、原子引用3.1 AtomicReference3.2 ABA问题3.3 AtomicMarkableReference四、原子累加器一、CAS原理 CAS全称CompareAndSe…

【C++学习】C++入门知识(上)

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《C学习》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 到这里&#xff0c;本喵的C语言学习暂时就告一段落了&#xff0c;开始C的学习了&#xff0c;同样的&a…

Ubuntu安装opencv4(c++)遇到的问题及解决方法

安装教程&#xff0c;参考 Ubuntu 18.04安装c版OpenCV4 问题&#xff11;&#xff1a;opencv无法下载IPPICV的问题 ippicv_2020_lnx_intel64_20191018_general.tgz 解决办法&#xff1a;解决编译opencv时&#xff0c;卡在IPPICV: Download: ippicv_2020_lnx_intel64_20191018…

hive开启自动转化common join和map join 带来的问题

背景&#xff1a; 我们采用的hive版本是3.1.2属于较新版本&#xff0c;此版本下hive本身默认开启map join 相关配置 hive默认开启map join&#xff0c;涉及的配置如下&#xff1a; hive.auto.convert.jointrue错误分析 错误发生在我们使用曝光转化明细宽表和素材维表进行j…

Bunifu UI WinForms 6.0.1 Crack

现代强大的设计元素 无论您是设计简单的 UI 还是需要高级用户界面和用户体验控件和组件&#xff0c;Bunifu 框架都配备了实现任何现代设计所需的一切。 用户界面和用户体验 您可以设计的内容没有限制 画廊 通过 Bunifu Rating 从您的应用中获取反馈 画廊 使用 Bunifu 面板…

【初学者入门C语言】之while、do-while、break及continue语句(五)

个人主页&#xff1a;天寒雨落的博客_CSDN博客-python,c,安装教程领域博主 &#x1f4ac; 刷题网站&#xff1a;一款立志于C语言的题库网站蓝桥杯ACM训练系统 - C语言网 (dotcpp.com) 特别标注&#xff1a;该博主将长期更新c语言内容&#xff0c;初学c语言的友友们&#xff0…

javascript: 复制对象时的深拷贝及浅拷贝(chrome 105.0.5195.125)

一,js代码<html> <head><meta charset="utf-8"/><title>测试</title> </head> <body><button onclick="assign()">无效:变量直接赋值</button><br/><br/><br/><button oncli…

Android 资源文件存放位置 Drawable 与 Mipmap 区别

Drawable Drawable 文件夹存储 bitmap 文件(png, jpeg, gif)、9-patch 文件 和 xml 文件&#xff0c;这些文件用于描述包含多种状态 (normal, pressed, focused) 的可绘制形状或可绘制对象。 android 的 drawable 文件一共可以有&#xff1a; drawable-ldpi (低密度) drawable-…

如何根治 Script Error.

作者&#xff1a;卢峰&#xff08;清锐&#xff09; 本文简要介绍了 Script Error 问题的来龙去脉&#xff0c;但也不局限于 Script Error&#xff0c;对于通用的系统性问题&#xff0c;应该找到系统性解决方案&#xff0c;进而治标治本。 Script Error 原因与当前解法 受浏览…

第一个spring项目

第一个spring项目 1、maven依赖导入 <dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.22</version> </dependency> <dependency><groupId>junit</gro…

计算机毕设源码网站基于SpringBoot的阳光线上交友系统

&#x1f345;文末获取联系&#x1f345; 目录 一、项目介绍 二、开题报告 三、截图 四、源码获取 一、项目介绍 基于SpringBoot的阳光线上交友系统-计算机毕设java毕业设计项目源码-可定制-IT实战课堂_哔哩哔哩_bilibili项目资料网址: http://www.itszkt.com毕业设计…

Python 内存管理的工作原理你了解吗?

Python 为开发者提供了许多便利&#xff0c;其中最大的便利之一是其几乎无忧的内存管理。开发者无需手动为 Python 中的对象和数据结构分配、跟踪和释放内存。运行时会为你完成所有这些工作&#xff0c;因此你可以专注于解决实际问题&#xff0c;而不是争论机器级细节。 尽管如…