並查集演算法回顧

2021-07-28 00:26:32 字數 512 閱讀 9671

並查集就是有關集合的合併和查詢演算法

對於每個集合來說我們都有乙個標誌

這個集合中的所有元素都指向這個標誌

我們可以定義a的標誌為set【a】

我們就可以利用這些標誌來進行集合的合併和查詢

在最開始的時候要memset(set,-1,sizeof(set));

至於為什麼後面可以自己體會

現在介紹兩個函式

int find_r(int p)

void join(int a,int b)

return;

}

find_r函式是找到元素p所在集合的標誌

join函式是將a,b兩個元素所在的集合進行合併

記住保險起見一定要加,有一次我沒加然後莫名其妙的re了,都是淚啊

if (ra!=rb)
其實之所以把並查集放在樹結構裡面是因為這裡的find_r運用了樹結構和剪枝

這個看圖自己體會就好

並查集演算法

所謂並查集,它是乙個集合,這個集合的元素也是集合,他支援三種操作 makeset x 建立乙個只有乙個元素x的集合x0,將這個集合放入並查集中 findset x 在並查集中尋找乙個元素s 注意並查集的元素s也是集合 滿足 x屬於s union x,y 將並查集中的元素s1,s2合併,其中x屬於s1...

並查集演算法

並查集是一種樹型的資料結構,用於處理一些不相交集合 disjoint sets 的合併及查詢問題。常常在使用中以森林來表示。讓每個元素構成乙個單元素的集合,也就是按一定順序將屬於同一組的元素所在的集合合併。1 makeset s 建立乙個新的並查集,包含s個單元素集合。2 union x,y 把x ...

並查集演算法

includeint pre 10 int find int x 查詢祖先節點 int i x,j while i r 壓縮路徑 return r void join int x,int y int main 2 食物鏈問題 description 動物王國中有三類動物a,b,c,這三類動物的食物鏈...