并查集问题指的是告诉你许多组两点之间的连接状态,要求某两点是否相连或者求有多少个连通图。
这种问题的求解是比较模板化的,关键在于建立find函数和union函数。find函数的主要作用是找到一个节点的根节点,union函数的作用是将某两个点的根节点相连。
主要的解题步骤如下:
1. 建立一个长度等于节点数的root数组和rank数组,root[i]=i,rank[i]=1.
2. 创建一个递归find函数,当x==root[x]时返回x,否则就root[x]=find(root[x]),同时改变rank数组 rank[x]=rank[root[x]]+1;
3. 创建union(x,y)函数,当find(x)!=find(y),如果将秩小的一边连在秩大的一边上。