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

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;
}

相关文章:

  • 让AI帮我写一个word转pdf的工具
  • 基于SpringBoot的家政服务系统设计与实现(源码+文档+部署讲解)
  • 五件应该被禁止自行托管的事情(5 Things That Should Be Illegal to Self Host)
  • 车载诊断架构 ---车载总线对于功能寻址的处理策略
  • Apache RocketMQ ACL 2.0 全新升级
  • 每日算法 - 【Swift 算法】Two Sum 问题:从暴力解法到最优解法的演进
  • 《数字藏品社交化破局:React Native与Flutter的创新实践指南》
  • Python----神经网络(基于DNN的风电功率预测)
  • 桃芯ingchips——windows HID键盘例程无法同时连接两个,但是安卓手机可以的问题
  • 问题处理——在ROS2(humble)+Gazebo+rqt下,无法显示仿真无人机的相机图像
  • 三目云台20倍变焦智能监控技术
  • Nginx 返回 504 状态码表示 网关超时(Gateway Timeout)原因排查
  • 金融量化智能体,如何开发一个有效的策略?
  • C++中委托构造函数(delegating constructor)详解和注意事项
  • elementUI 循环出来的表单,怎么做表单校验?
  • InforSuite RDS 与django结合
  • React事件机制
  • 解决 Conda 安装 PyTorch 1.1.0 报错:excluded by strict repo priority(附三种解决方案)
  • [特殊字符]川翔云电脑:重新定义云端算力新纪元
  • 【爬虫】DrissionPage-3
  • 收到延期付款利息,该缴纳增值税吗?
  • 国税总局上海市税务局回应刘晓庆被举报涉嫌偷漏税:正依法依规办理
  • 湖北宜化拟斥资超32亿加价回购“弃子”,布局上游煤炭业务
  • 商务部回应美方加严限制中国芯片:敦促美方立即纠正错误做法
  • 娃哈哈:自4月起已终止与今麦郎的委托代工关系,未来将坚持自有生产模式
  • 牛市早报|中方调整对美加征关税措施,五部门约谈外卖平台企业