資料結構 並查集

2021-09-19 22:23:22 字數 973 閱讀 4308

所謂並查集,顧名思義,是乙個支援「並」,「查」的集合。

並查集可以想象成乙個森林,就是樹的集合。

在並查集中,還有乙個重要思想:代元法。

其實就是在每乙個集合中選乙個固定元素,作為集合的代表。

有一種定義方法:用樹形資料結構儲存資料,樹上的每乙個節點都是乙個元素,樹根是代表元素。

但一般來說,我們會維護乙個fa陣列,fa來儲存父節點,根節點的fa是他自己。

在我們初始化乙個並查集時,元素的fa都是自己,然後才有get(查詢)和merge(合併)操作。

建並查集:

1

int fa[10001];2

void

init()

3

路徑壓縮

路徑壓縮 的思想是,我們只關心每個結點的父結點,而並不太關心樹的真正的結構。這樣我們在一次查詢的時候,可以把查詢路徑上的所有結點的 father[i]father[i] 都賦值成為根結點。只需要在我們之前的查詢函式上面進行很小的改動。

比如說一棵存並查集的樹

這就是它的路徑壓縮,大大的減小了查詢複雜度。

接下來我們就來寫get,merge的模板。

查詢(get)

1

int get(intx)2

合併(merge)

1

void merge(int x,inty)2

其實除了並與查之外,還考乙個操作:判斷兩個數是否屬於同一集合。

這個就直接用get函式查詢父親是否相同就可以了。

1

bool judge(int x,inty)2

其實,這幾個模板操作還很容易理解,重在多練,多想。

之後我會再講解一些習題,來幫助大家深入理解並查集。

我們下次見!

資料結構 並查集

並查集,顧名思義,合併 查詢 集合 並查集是一種樹型的資料結構,用於處理一些不相交集合 disjoint sets 的合併及查詢問題。常常在使用中以森林來表示。對於概念等等的這裡不再贅述,直接講解應用。應用1 判斷圖中有多少聯通分量 或者圖是否聯通 聯通分量 1 hdu 1213 應用2 判斷圖是否...

資料結構 並查集

time limit 1000ms memory limit 65536k 某城市有n個人,現在給定關於n個人的m條資訊,m條資訊是兩個人在同乙個小區,根據所給資訊,判斷這個城市最多可能有多少個小區。n個人編號為1 n。多組輸入。每組第一行有兩個整數n,m 2 n 50000,0 m n 2 接下來...

資料結構 並查集

一 基本概念 並查集是一種樹型的資料結構,用於處理一些不相交集合 disjoint sets 的合併及查詢問題。常常在使用中以森林來表示。集就是讓每個元素構成乙個單元素的集合,也就是按一定順序將屬於同一組的元素所在的集合合併。在一些有n個元素的集合應用問題中,通常是在開始時讓每個元素構成乙個單元素的...