当前位置: 首页 > ai >正文

2035.5.15 并查集

并查集在加入了路径压缩的优化后支持以近乎o(1)来进行两个操作 :

1.合并两个集合

2.判断两个元素是否属于同一个集合

一开始有n个数,后面有n1个合并集合操作,n2个查询两个元素是否在同一个集合操作

//n个数,最开始每个数各自在一个集合中
#include <iostream>using namespace std;const int N = 100010;int p[N];    //p的意思是pre
int n, n1, n2;int find(int x)     //在并查集基本操作中可以维护一些额外的变量
{while (p[x] != x) p[x]=find(p[x]);        //如果这里是x=p[x]那就不带路径压缩 如果是p[x]=find(p[x])那么就加入了路径压缩 这里难懂的原因这里find(p[x])的意思是下一层递归将p[x]当成下一层的x,那么就实现了向上找的功能return x;                                
}int main()
{cin >> n >> n1 >> n2;for (int i = 1; i <= n; i++)p[i] = i;while (n1--){int a, b;cin >> a >> b;p[find(a)] = find(b);}while (n2--){int a, b;cin >> a >> b;if (find(a) == find(b)) cout << "yes" << endl;else cout << "no" << endl;}return 0;
}

同时除了完成并查集两个这种最基础的操作,它还支持在完成基础操作的过程中维护一些额外的白变量,比如每个集合的元素数量大小

下面代码题意与上面相同,只不过多了n3个查询元素a所在集合的元素数量的操作

#include <iostream>using namespace std;const int N = 100010;int p[N],s[N];    //s的意思是size  规定只有根节点(代表元)有意义
int n, n1, n2, n3;int find(int x)
{while (p[x] != x) p[x] = find(p[x]);return x;
}int main()
{cin >> n >> n1 >> n2 >> n3;for (int i = 1; i <= n; i++){s[i] = 1;p[i] = i;}while (n1--){int a,b;cin >> a >> b;if (find(a) == find(b)) continue;p[find(a)] = find(b);s[find(b)] += s[find(a)];    //如果上面没有判断a和b是否已经在一个集合中了,那么s会多加,导致出现错误}while (n2--){int a, b;cin >> a >> b;if (find(a) == find(b)) cout << "yes" << endl;else cout << "no" << endl;}while (n3--){int a;cin >> a;cout << s[find(a)] << endl;}return 0;
}

http://www.xdnf.cn/news/6362.html

相关文章:

  • C#中BackgroundWorker的概念与用法详解
  • uniapp中vue3和pinia安装依赖npm install失败
  • calico排错思路
  • WebSocket:实时通信(如聊天应用)从零到一的深度解析
  • 养生:打造健康生活的四大支柱
  • 自用Vscode 配置c++ debug环境
  • 国产化Word处理控件Spire.Doc教程:通过C# 删除 Word 文档中的超链接
  • Window下Jmeter多机压测方法
  • linux使用普通用户,禁止root用户登录实操
  • 大模型智能体与 React Flow:构建智能化可视化交互系统的技术范式
  • Vue3+ElementPlus 开箱即用后台管理系统,支持白天黑夜主题切换,通用管理组件,
  • 海外短剧H5/App开源系统搭建指南:多语言+国际支付+极速部署
  • 【spring】spring源码系列之十:spring事务管理(下)
  • PostgreSQL malformed array literal异常
  • PostgreSQL pgrowlocks 扩展详解
  • 1267, “Illegal mix of collations (latin1_swedish_ci,IMPLICIT
  • 【重磅】配电网智能软开关和储能联合规划
  • 专项智能练习(定义判断)_DA_02
  • redis解决常见的秒杀问题
  • IP地址查询可以了解到哪些宿主信息
  • 地球阿米特黑客组织使用新型工具攻击军用无人机供应链
  • 介绍一下什么是 AI、 AGI、 ASI
  • 解决 Ubuntu 22.04 安装后启动卡死问题
  • 在文件检索方面doris和elasticsearch的区别
  • Kotlin 和 Java 混合开发时需要注意哪些问题
  • 信息系统运行管理员:临阵磨枪版
  • 01-数据结构概述和时间空间复杂度
  • 多模态大语言模型arxiv论文略读(七十六)
  • 插件双更新:LeetCode 刷题支持正式上线,JetBrains IDE 插件持续升级!
  • 前端图形渲染 html+css、canvas、svg和webgl绘制详解,各个应用场景及其区别