並查集初學

2021-10-14 05:01:36 字數 972 閱讀 2274

並查集是一種樹型的資料結構,用於處理一些不相交集合的合併及查詢問題。

並查集的思想是用乙個陣列表示了整片森林(parent),樹的根節點唯一標識了乙個集合,我們只要找到了某個元素的的樹根,就能確定它在哪個集合裡。

並查集用在一些有 n 個元素的集合應用問題中,我們通常是在開始時讓每個元素構成乙個單元素的集合,然後按一定順序將屬於同一組的元素所在的集合合併,其間要反覆查詢乙個元素在哪個集合中。

這個過程看似並不複雜,但資料量極大,若用其他的資料結構來描述的話,往往在空間上過大,計算機無法承受,也無法在短時間內計算出結果,所以只能用並查集來處理。

如上圖 0-4 下面都是 0,5-9 下面都是 1,表示 0、1、2、3、4 這五個元素是相連線的,5、6、7、8、9 這五個元素是相連的。

再如上圖 0、2、4、6、8 下面都是 0 這個集合,表示 0、2、4、6、8 這五個元素是相連線的,1、3、5、7、9 下面都是 1 這個集合,表示 0,1、3、5、7、9 這五個元素是相連的。

#include

#define size 20

int fa[size]

,faa[size]

;voidf(

int n)

}intg(

int q)

return fa[q];}

inth

(int a,

int b)

if(faa[w1]

>faa[w2]

)else

return1;

}int main (

)else

}return0;

}

初學並查集 並查集1

現在,我是用乙個初學者的眼光來寫並查集,此文最初寫於我學並查集的那天,後經過多次修改。1 並查集是什麼 並查集是乙個具有多個連通分支的圖,他擁有合併兩個連通分支,和查詢兩個元素是否位於同乙個連通分支的功能。2 並查集的簡單應用 並查集解決什麼問題 假如有一些點,你知道哪些點是直接相連的,但實際上間接...

並查集初學(1)

出處 github 並查集 union find sets 是一種非常精巧而實用的資料結構,它主要用於處理一些不相交集合的合併問題。一些常見的用途有求連通子圖 求最小生成樹的 kruskal 演算法和求最近公共祖先 least common ancestors,lca 等。使用並查集時,首先會存在一...

C 初學記錄(並查集)

並查集 題目 今天是伊格那丟的生日。他邀請了很多朋友。現在該吃晚飯了。伊格那丟想知道他至少需要多少張桌子。你必須注意到並不是所有的朋友都認識對方,而且所有的朋友都不想和陌生人待在一起。這個問題的乙個重要規則是如果我告訴你a認識b,b認識c,這意味著a,b,c互相認識,所以它們可以在乙個表中。例如 如...