并查集一般在遇到求解冗余关系,关系合并,环的数量等问题的时候使用。不需要对各数值进行输出。

注意与有向无环图问题进行区分!

有向无环图模板看这里:https://blog.csdn.net/qq_41687938/article/details/117821723

 

并查集是一个很优美的数据结构,很多情况下,提炼问题后,可以用并查集进行解决,这里总结下并查集的模板及注释,可以直接用

1.并查集的使用:

//初始化并查集
int n = xx.size();
UnionFindSet dsu(n);//初始化并查集

//将两个点合并
for(int i = 0; i < n; i++){
    dsu.merge(xx[i], xx[i])
    //......
}

2.并查集模板(直接用就行,可以根据需要修改返回值出代码) 

有两处优化:(1)查询优化 (2)路径优化

//并查集实现
class UnionFindSet{
    vector<int> F;//并查集容器
    vector<int> rank;//秩优化(如果两个都有很多元素的根节点相遇,将根节点选为元素较少的那一个,可以节省时间)
    int n;

public:
    //并查集