并查集
树形结构,用于处理一下不相交集合的合并及查询问题,在使用中以森林表示。
father[i]表示第i个元素所在集合的代表元素(即i所在的树形结构的根)
初始化:
father[i]=i
查找代表元素:
int find(int x) { if(father[x]==x) return x; else return find(father[x]); }
合并:
f1=find(x); f2=find(y); father[f1]=father[f2];
路径压缩:
if(father[x]==x) return x; return father[x]=find(father[x]);