并查集
并查集是一种树形的数据结构,用于处理一些不相交集合的合并(Union)及查询问题(Find)。
可以用一个1维数组进行跟踪。父亲数组 parent[ ],记录节点的父亲节点是谁。初始化节点父亲为自己本身,两两节点互不连接。
考虑如下图:
Find: 不断查询自己的父亲节点,直到到达根节点。根节点为 parent[i] == i;
int find(int i){
while(i != parent[i]){
i = parent[i];
}
return i;
}
Union: 合并节点 x 和节点 y 所属的集合;先用find函数找到 节点 x 的根节点和节点 y 的根节点;若他们不属于同一个根节点,则进行连接(合并)。
void Union(int x,int y){
int rootX = find(x);
int rootY = find(y);
if(rootX == rootY)