並查集學習總結

2021-10-07 09:23:58 字數 815 閱讀 4826

並查集,在一些有n個元素的集合應用問題中,我們通常是在開始時讓每個元素構成乙個單元素的集合,然後按一定順序將屬於同一組的元素所在的集合合併,其間要反覆查詢乙個元素在哪個集合中。這一類問題近幾年來反覆出現在資訊學的國際國內賽題中,其特點是看似並不複雜,但資料量極大,若用正常的資料結構來描述的話,往往在空間上過大,計算機無法承受;即使在空間上勉強通過,執行的時間複雜度也極高,根本就不可能在比賽規定的執行時間(1~3秒)內計算出試題需要的結果,只能用並查集來描述。

並查集是一種樹型的資料結構,用於處理一些不相交集合(disjoint sets)的合併及查詢問題。常常在使用中以森林來表示。

並查集一般包括兩個操作:

即使用一般的樹形結構

typedef

struct node;

typedef node * tree;

struct node

;tree bt;

即直接定義fa[

x]

fa[x]

fa[x]為x

xx的父節點;

2.1初始化

void

makeset

(int n)

}

2.2查詢父節點
int

findset

(int x)

2.3合併集合
void

unionset

(int x,

int y)

}

並查集總結學習

主要是為了複習內容,好讓自己安心一點 之前學習並查集的時候,並沒有系統地學習圖論的知識,現在再看過來,又要好一些了。根據目前的理解,並查集就是 無向圖中有關聯的部分連通 判斷一條邊是否成環 前提全域性變數 int fa n 祖宗 int rank n 成員數 void init find函式 找爸爸...

並查集 總結

自己學完後總結一下吧,並查集,我的理解就是乙個查詢與合併,用乙個find函式來查詢自己的祖先也就是根節點,在這過程中還可以進行路徑壓縮,就是讓這個點直接變到根節點之下,還有就是合併,找出這兩個點的根節點,如果根節點不相同的話,就將乙個根節點放到另乙個根節點下面。這道題的就是用並查集做,找出總共有幾個...

並查集總結

用自己的理解來寫好了 有些地方可能不對 不定時更新理解 操作主要為三步 一 初始化 void init 二 查詢 這個為路徑壓縮 就是每次查詢時更新 查詢節點 x 上面所有節點直接使他們連向根節點 每次查詢更新 int find int x 另一種路徑壓縮 不過麻煩了些 作為理解 int find ...