並查集屬於不相交的資料結構,可以用乙個根節點代表整棵樹來進行判斷,並查集的核心簡化步驟有乙個就是在構建樹的時候應用了路徑壓縮
以便之後查詢的時候速度更加快捷
以下貼出例題原始碼,並在原始碼中講解並查集的四個模板函式
#include"iostream"
#include"cstdio"
using namespace std;
int fa[100]; //記錄編號為i的父親的編號
int deep[100]; //記錄森林中樹的深度
int n,m;
int x,y;
void init(int n) //初始化並查集
}int find(int x) //查詢樹中的根
else
}void unit(int x,int y) //合併兩個樹,擁有同乙個根節點,並且合併的時候,把小樹插到大樹上面
else
fa[y]=x;}}
}bool same(int x,int y) //判斷是否是同根節點,即判斷祖先是否相同
int main()
for(int i=1;i<=n;i++) //遍歷一遍,是根節點就就計數
}cout}
樹的應用 並查集
首先,什麼是並查集?並查集是一種簡單的集合表示。我們可以簡單的思考一下這個名字,集 應該就是集合的意思,而 並 和 查 估計是兩種動作或者形容。這個我們後面慢慢就知道了。乙個結合中有若干個元素,我們通常將該集合劃分成若干個子集。我們通常用樹的雙親表示法,作為並查集的儲存結構。我們一般將每個子集,表示...
並查集的森林封裝
採用了啟發式策略,按秩合併和路徑壓縮技術。file disjoint set forest.h brief 並查集 include include using namespace std namespace algo 建立乙個集合 make set static disjointsetnode ma...
C 並查集 森林實現
使用森林儲存集合之間的關係,屬於同一集合的不同元素,都有乙個相同的根節點,代表著這個集合。當進行查詢某元素屬於哪個集合時,即遍歷該元素到根節點,返回根節點所代表的集合 遍歷過程中使用路徑壓縮的優化演算法,使整體樹的形狀更加扁平,從而優化查詢的時間複雜度。當進行合併時,即將兩顆子樹合併為一棵樹,將一棵...