当前位置:网站首页>并查集模板及思想
并查集模板及思想
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;
}
边栏推荐
- IP属地如何高效率识别
- Excuse me this hologres dimension table is cached?How to Finished
- ORACLE CLOUD 在国内有数据中心吗?
- 组件通信--下拉菜单案例
- C# 获取文件名和扩展名(后缀名)
- 被误解的 MVC 和被神化的 MVVM(一)
- 【Metaverse系列一】元宇宙的奥秘
- 论文解读(JKnet)《Representation Learning on Graphs with Jumping Knowledge Networks》
- SwinIR实战:如何使用SwinIR和预训练模型实现图片的超分
- ASP.NET Core依赖注入之旅:3.Service Locator和依赖注入
猜你喜欢
随机推荐
国内首发可视化智能调优平台,小龙带你玩转KeenTune UI
我想请问下,我们的数据库是在亚马逊,Dataworks 连不通,怎么办?
MobileVIT实战:使用MobileVIT实现图像分类
Description of the functional scenario of "collective storage and general governance" in the data center
Excuse me this hologres dimension table is cached?How to Finished
生产环境如何删除表呢?只能在SQL脚本里执行 drop table 吗
【云驻共创】【HCSD大咖直播】亲授大厂面试秘诀
node connection mongoose database process
J9数字虚拟论:元宇宙的潜力:一股推动社会进步的力量
303. Range Sum Query - Immutable
如何直击固定资产管理的难题?
双指针/滑动窗口问题
火热的印度工厂,带不动印度制造
使用Stream多年,collect还有这些“骚操作”?
软考 --- 软件工程(1)概念、开发模型
面试突击:什么是粘包和半包?怎么解决?
酷开科技 × StarRocks:统一 OLAP 分析引擎,全面打造数字化的 OTT 模式
uniapp 切换 history 路由模
超分重建数据集
一键进入华为云会议,长期免费值得所有开发团队有一套【华为云至简致远】









