并查集find函数总结
  • 板块学术版
  • 楼主shenruzhang
  • 当前回复17
  • 已保存回复17
  • 发布时间2024/9/25 20:41
  • 上次更新2024/9/25 22:46:47
查看原帖
并查集find函数总结
543701
shenruzhang楼主2024/9/25 20:41
int find(int u) {
	return u==fa[u]?u:fa[u]=find(fa[u]);
}

就是这样子的一个简单的并查集的基本fin函数,却又有很多的细节

首先,find原来是长这样的:

int find(int u) {
	return u==fa[u]?u:find(fa[u]);
}

看起来没什么区别对吧,其实就是上面的进行了路径压缩,而这个只是最普通的find()函数

上面的好处就在于:一次find()就“打”通了整个连通块,加快了之后调用find的函数的速度(其实就是fa数组上升的数据)。


还有一个各位可能不需要看的(也就是仅提醒个人的),那就是某位大聪明是这样写的:

int find(int u) {
	return u==fa[u]?u:u=find(fa[u]);
}

那你路径压缩了个寂寞?

综上,其实并查集还是个好用、易理解且代码超级短的数据结构。但是某位大聪明经常写错,所以大家还是要注意啊,不要手快了犯低级错误!

其他的并查集函数也就无非那样,merge可能要因题而异,但这个find函数一般是不会变的,也是最简单的一个

2024/9/25 20:41
加载中...