带权并查集
并查集中每个点维护一个信息,该信息等于从该点到根路径上所有信息之和/积/异或和,比如路径长度,或者每个点黑白染色等等信息。
在路径压缩的同时要调整信息,要把父亲到根的信息合并。
要做的事也很简单,只是在普通的路径压缩上进行一些添加。
inline int getf(int x){
if(fa[x]==x)return x;
int f=getf(fa[x]);//先更新父节点
len[x]+=len[fa[x]];//再把父节点到根的值合并
return fa[x]=f;//最后路径压缩
}