当前位置:网站首页>并查集模板及思想
并查集模板及思想
2022-08-03 17:14:00 【lcy2023】
acwing相关资料:https://www.acwing.com/activity/content/problem/content/885/
基本思想
如果想合并两个集合,直接把根节点插到另一个集合的某个地方即可
路径压缩优化–时间复杂度近乎为O(1)
在问题2中,求x的集合编号与数的高度成正比,复杂度较高,所以可以进行优化,在第一次查的时候正常一步一步查到根节点while(p[x]!=x) x=p[x]
,但一旦找到后就会把这个线上的所有点都指向根节点,之后再查就是O(1)的复杂度
代码
模板题:https://www.acwing.com/problem/content/838/
#include <iostream>
using namespace std;
const int N = 100010;
int p[N];
int find(int x) // 返回祖宗节点+路径压缩
{
// 如果不是根节点则进行路径优化
if(p[x]!=x) p[x]=find(p[x]);
return p[x];
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
//初始化
for(int i = 1; i<=n;i++) p[i]=i;
while(m--)
{
char op[2];
int a,b;
scanf("%s%d%d",op,&a,&b);
// 将根节点的父节点改为另一个集合的父节点完成合并操作
if(op[0] == 'M') p[find(a)] = find(b);
else
{
if (find(a) == find(b)) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
}
return 0;
}
拓展维护集合额外信息
维护集合个数
:::info
例题:https://www.acwing.com/activity/content/problem/content/886/
:::
#include <iostream>
using namespace std;
const int N = 100010;
int p[N],cnt[N];
int find(int x)
{
if(p[x]!=x) p[x] = find(p[x]);
return p[x];
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
// 初始化
for (int i = 1; i <= n; i++)
{
p[i] = i;
cnt[i] = 1;
}
while(m--)
{
char op[5];
int a,b;
scanf("%s",op);
if(op[0]=='C')
{
scanf("%d%d",&a,&b);
a = find(a);
b=find(b);
if (a!=b){
p[a] = b;
cnt[b]+=cnt[a];
}
}else{
if (op[1] == '1')
{
scanf("%d%d",&a,&b);
if(find(a)==find(b))
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}else{
scanf("%d",&a);
cout<<cnt[find(a)]<<endl;
}
}
}
return 0;
}
边栏推荐
- 学会 Arthas,让你 3 年经验掌握 5 年功力!
- php之相似文章标题similar_text()函数使用
- 华为、联想、北汽等入选工信部“企业数字化转型和安全能力提升”首批实训基地
- [Unity Starter Plan] Making RubyAdventure01 - Player Creation & Movement
- 【技术白皮书】第一章:OCR智能文字识别新发展——深度学习的文本信息抽取
- How ArkUI adapter somehow the screen
- Web3 安全风险令人生畏?应该如何应对?
- EMQX Newsletter 2022-07|EMQX 5.0 正式发布、EMQX Cloud 新增 2 个数据库集成
- 软件测试<用例篇>
- Components of communication - the drop-down menu
猜你喜欢
【保姆级示例向】观察者模式
华为、联想、北汽等入选工信部“企业数字化转型和安全能力提升”首批实训基地
Understand the recommendation system in one article: Outline 02: The link of the recommendation system, from recalling rough sorting, to fine sorting, to rearranging, and finally showing the recommend
关于 Intel 在 micro-vm 快速启动的探索及实例演示 | 第 36-38 期
ThreeJS简介
【数据库数据恢复】SqlServer数据库无法读取的数据恢复案例
leetcode-每日一题899. 有序队列(思维题)
【机器学习】机器学习的基本概念/术语2
PTA递归练习
软件测试<用例篇>
随机推荐
企业如何选择低代码开发平台
【云驻共创】【HCSD大咖直播】亲授大厂面试秘诀
uniapp 切换 history 路由模
Components of communication - the drop-down menu
isNotBlank与isNotEmpty
leetcode-每日一题899. 有序队列(思维题)
兄弟组件通信context
关于oracle表空间在线碎片整理
FinClip | 2022 年 7 月产品大事记
一个域名对应多个IP地址
我想请问下,我们的数据库是在亚马逊,Dataworks 连不通,怎么办?
论文解读(JKnet)《Representation Learning on Graphs with Jumping Knowledge Networks》
关于 Intel 在 micro-vm 快速启动的探索及实例演示 | 第 36-38 期
大型企业数据治理的现状和解决方案有哪些参考?_光点科技
高效的组织信息共享知识库是一种宝贵的资源
多表查询最值
ICDAR比赛技术分享
双指针/滑动窗口问题
微信小程序 - 数组 push / unshift 追加后数组返回内容为数字(数组添加后打印结果为 Number 数值类型)
国内首发可视化智能调优平台,小龙带你玩转KeenTune UI