樹的應用 森林 並查集

2021-07-10 11:40:57 字數 758 閱讀 4419

並查集屬於不相交的資料結構,可以用乙個根節點代表整棵樹來進行判斷,並查集的核心簡化步驟有乙個就是在構建樹的時候應用了路徑壓縮

以便之後查詢的時候速度更加快捷

以下貼出例題原始碼,並在原始碼中講解並查集的四個模板函式

#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 並查集 森林實現

使用森林儲存集合之間的關係,屬於同一集合的不同元素,都有乙個相同的根節點,代表著這個集合。當進行查詢某元素屬於哪個集合時,即遍歷該元素到根節點,返回根節點所代表的集合 遍歷過程中使用路徑壓縮的優化演算法,使整體樹的形狀更加扁平,從而優化查詢的時間複雜度。當進行合併時,即將兩顆子樹合併為一棵樹,將一棵...