并查集的使用范围:
1.合并集合
2.查询两元素是否属于同一集合
高级用法:
3.进行集合划分<带权并查集>
4.连通块块数查询&块内元素个数统计<连通图>
5.撤销合并<可持久化并查集> //本文暂不涉及, 我还不会
并查集基本操作:
#define rep(i,n) for(int i = 1; i <= n; i++)
class DisjointSet {
private :
int bing[Size];
public :
void init (int n) ;
int find (int x) ;
void merge (int x, int y) ;
bool same (int x, int y) ;
};
初始化
void init (int n)
{
rep (i, n) bing[i] = i;
}
寻找父节点&路径压缩
int find (int x)
{
if (bing[x] == x) return x;
return bing[x] = find (bing[x]);
}
合并集合
void merge (int x, int y)
{
int px = find (x);
int py = find (y);
if (px == py) return ;
bing[px] = py;
}
查询
bool same (int x, int y)
{
return find (x) == find (y);
}
并查集拓展操作_带权并查集
带权并查集的权重指代的是某一节点到集合中根节点的距离, 利用带权并查集可以实现二分图的划分, 和循环指向性集合的划分. 在维护过程中, 距离可以不为1.
class DisjointSet {
private :
int bing[Size];
int deep[Size];
public :
void init (int n) ;
int find (int x) ;
bool merge (int x, int y, int distance) ;
};
初始化
void init (int n)
{
rep (i, n)
{
bing[i] = i;
deep[i] = 0 ;
}
}
寻找父节点&路径压缩
int find (int x)
{
if (bing[x] != x)
{
int t = bing[x];
bing[x] = find (bing[x]);
deep[i] += deep[t];
}
return bing[x];
}
合并集合
bool merge (int x, int y, int distance)
{
int px = find (x);
int py = find (y);
if (px == py)
{
if (deep[x] - deep[y] != distance)
return false ;
}
else
{
bing[px] = py;
deep[px] = deep[y] - deep[x] + distance;
}
return true ;
}
并查集的拓展操作_连通图
利用并查集, 可以获得所有节点的连通块个数以及每一个连通块的元素个数. 我们利用根节点记录连通块内的元素数量, 需要查询时, 直接查询根节点的数据即可.
class DisjointSet {
private :
int bing[Size];
int num[Size];
int lian;
public :
void init (int n) ;
int find (int x) ;
void merge (int x, int y) ;
int get_num (int x) ;
};
初始化
void init (int n)
{
rep (i, n)
{
bing[i] = i;
num[i] = 1 ;
}
lian = n;
}
寻找父节点&路径压缩
int find (int x)
{
if (bing[x] == x) return x;
return bing[x] = find (bing[x]);
}
合并集合
void merge (int x, int y)
{
int px = find (x);
int py = find (y);
if (px == py) return ;
bing[px] = py;
num[py] += num[px];
lian--;
}
获得元素个数
int get_num (int x)
{
return num[find (x)];
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南