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函数一般是不会变的,也是最简单的一个。