带权并查集


并查集中每个点维护一个信息,该信息等于从该点到根路径上所有信息之和/积/异或和,比如路径长度,或者每个点黑白染色等等信息。

在路径压缩的同时要调整信息,要把父亲到根的信息合并。

要做的事也很简单,只是在普通的路径压缩上进行一些添加。

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;//最后路径压缩
}