并查集
1.C++内存四区2.算法-排序-快速排序3.算法-排序-归并排序4.c++重载5.算法-二分6.算法—前缀和7.算法—差分8.算法-双指针9.c++引用10.c++函数默认参数及占位参数11.c++函数模板12.c++类和对象-封装13.struct和class的区别14.成员属性设置为私有15.C++类和对象-对象特性(1)16.C++类和对象-对象特性(2)17.N皇后18.动态规划dp-01背包问题19.C++类和对象-对象特性(4)20.C++类和对象-对象特性(3)21.C++友元22.C++运算符重载23.C++继承24.C++多态25.C++类模板26.C++vector容器27.C++string容器28.C++deque容器29.算法-树状数组30.算法线段树31.算法-bfs32.算法-贪心33.算法-Flood Fill34.数据结构-链表35.数据结构-栈36.数据结构-队列37.P2678 跳石头38.5132139.54440.3213241.牛客寒假算法集训1-总结42.牛客寒假算法集训2-总结43.牛客寒假算法集训3-总结44.数论-质数45.博弈论46.第十四届蓝桥杯省赛C++题解47.Trie树
48.并查集
49.数据结构-堆50.哈希表51.拓扑排序52.Dijkstra53.spfa54.数论-约数55.数论-欧拉函数56.图的存储和遍历57.牛客寒假算法集训4-总结58.牛客寒假算法集训5-总结59.牛客寒假算法集训6-总结60.Bellman_ford61.Floyd62.编辑距离63.数位dp作用:
1.将两个集合合并
2.询问两个元素是否在一个集合当中
基本原理:
每个集合用一棵树来表示,树根的编号就是整个集合的编号。每个节点存储它的父节点,p[x]表示x的父节点
操作:
1.判断树根:
if(p[x]==x);
2.求x的集合编号:
while(p[x]!=x) x=p[x];
3.如何合并两个集合:
p[x]是x的集合编号,py是y的集合编号。p[x]=y;
优化:
路径压缩~o(1);
AC代码:
#include <iostream>
using namespace std;
const int N=1e5+10;
int a,b;
char op[2];//操作
int n,m;
int p[N];//存储父节点
int find(int x)//返回节点祖宗
{
if(p[x]!=x) p[x]=find(p[x]);
return p[x];
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++) p[i]=i;//初始化每一个节点是一个集合 所以自己就是祖宗
while(m--)
{
cin>>op>>a>>b;
if(op[0]=='M') p[find(a)]=find(b);//让编号a的集合 认集合b祖宗当爹
else
{
if(find(a)==find(b)) cout<<"Yes"<<endl;//两集合祖宗相等
else cout<<"No"<<endl;
}
}
return 0;
}
本题在操作的过程加上了统计集合元素数量的操作
#include <iostream>
using namespace std;
const int N=1e5+10;
int a,b;
char op[3];//操作
int n,m;
int p[N];//存储父节点
int cnt[N];//根节点才有意义,表示该根节点的集合元素的数量
int find(int x)//返回节点祖宗+路径压缩
{
if(p[x]!=x) p[x]=find(p[x]);
return p[x];
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
p[i]=i;//初始化每一个节点是一个集合 所以自己就是祖宗
cnt[i]=1;
}
while(m--)
{
cin>>op;
if(op[0]=='C')
{
cin>>a>>b;
if(find(a)==find(b)) continue;
cnt[find(b)]+=cnt[find(a)];//更新数量
p[find(a)]=find(b);//让编号a的集合 认集合b祖宗当爹
}
else if(op[1]=='1')
{
cin>>a>>b;
if(find(a)==find(b)) cout<<"Yes"<<endl;//两集合祖宗相等
else cout<<"No"<<endl;
}
else
{
cin>>a;
cout<<cnt[find(a)]<<endl;//查询数量
}
}
return 0;
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析