算法笔记之并查集
一、并查集的定义
并查集是一种树型的数据结构,用于处理一些不相交集合(disjoint sets)的合并及查询问题。常常在使用中以森林来表示。
并查集,顾名思义,支持以下两种操作操作:
-
并(Union):把两个不相交的集合合并为一个集合。
-
查(Find):查询两个元素是否在同一个集合中。
二、并查集的实现
并查集往往用树来存,使用
那么我们就可以得到这样的一颗树:
查询
查询
int f[N];
int find(int x)
{
if(f[x]==x)return x;
return find(f[x]);
}
但这样会有一个问题:当数据很大时,树的深度会很高,所以我们需要压缩路径。
我们可以在查询的过程中,让
优化代码如下:
int f[N];
int find(int x)
{
if(f[x]==x)return x;
return f[x]=find(f[x]);
}
本文来自博客园,作者:FHenryh,转载请注明原文链接:https://www.cnblogs.com/FHenryh/p/find-and-union.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix