#include
#include
#include
#include
using namespace std;/*/
/查詢快,但是合併差
class unionfind1
int find(int p)
bool isconnected(int p,int
q) void union(int p,int
q)} ;
*//*
//基於2的基礎上的優化(主要是優化)
//根據集合的元素的多少來決定指向
class unionfind3
~unionfind3()
int find(int p)
bool isconnected(int p,int
q)
void union(int p,int
q)
}} ;*/
/*//在2上基於rank的優化
//rank[i]表示根節點為i的樹的高度
class unionfind4
~unionfind4()
int find(int p)
bool isconnected(int p,int
q) void union(int p,int
q) else
}} ;*/
//路徑壓縮 時間複雜度近乎是o(1)
class unionfind5
~unionfind5()
int find(int p)
//return p;
if(p!=parent[p])//路徑壓縮2所有的節點都指向根節點
parent[p]=find(parent[p]);
return parent[p];
}bool isconnected(int p,int
q)
void union(int p,int
q) else
}} ;
並查集及種類並查集
b站 並查集int find root int x return x int hebing int x,int y return0 檢驗 include using namespace std const int n 100 const int m 200 int parent n deep n i...
並查集的實現及優化
並查集是一種用於在森林中判斷子圖數量及點的歸屬的資料結構,由於其特殊的路徑壓縮操作,使得這一過程可以異常地快。並查集主要由乙個pre陣列以及兩個函式組成 find函式和join函式。pre陣列表示每一節點的前驅,最終已完成的並查集,每乙個子圖的所有點只有乙個前驅 這也是其高效的原因 而初始化的並查集...
並查集的優化及應用
2018 05 01 15 13 08 並查集是乙個時空複雜度非常優越的資料結構,並且通過優化後其複雜度為。並查集的優化主要有兩個方面 路徑壓縮 按rank合併 public class unionfindset public int find int i public boolean union ...