并查集总结
并查集 一、定义 并查集 是一种树型的数据结构,用于处理一些不相交 集合 (Disjoint Sets)的合并及查询问题。常常在使用中以森林来表示。 集合定义方法: “代表元法”,即 每个集合选择一个固定的元素,作为整个集合的“代表” 。 二、基本操作 Find —— 查询一个元素属于哪一个集合 Merge —— 把两个集合合并成一个大集合 代码示例: 三、路径压缩与按秩合并 ——并查集的 奇技淫巧 ①路径压缩 Get时, 将访问过的节点直接指向树根。 均摊复杂度 代码示例: int find(int x) { return x == fa[x] ? fa[x] : fa[x] = find(fa[x]); } 按秩合并 “秩”:树的深度(未路径压缩) / 集合大小 。均摊复杂度 将”秩“记录在 “代表元素” , 合并时, 将“秩”较小的树根 作为 “秩”较大的树根的子节点。 代码示例: void unionn(int x, int y){//按大小合并 int u=Get(x), v=Get(y); if(u != v) { if(size[u]<size[v]) f[u]=v, size[v]+=size[u];//按大小合并每次要更新大小 else f[v]=u, size[u]+=size[v]; } } void unionn(int x, int y){/