C 並查集的一般實現方法及原始碼

2021-10-21 10:20:47 字數 885 閱讀 9280

n = nums.

size()

;unordered_map<

int,

int> dic;

// 用dic來確定有多少個不同的元素,並且編號

int id =0;

// 給每個不同的類進行編號

for(

int i=

0; i < n; i ++

)}

vector<

int> f;

f.

resize

(id)

;for

(int i =

0; i < id; i++

)

value表示集合的編號,一共有n個元素,就初始化成n個集合,index是每一類元素的編號,每個f【index】的值,代表著該index類所屬的集合。

index

value00

1122

3344

把 f 的每乙個元素都設定成和自己下標一樣的值,就是說,每個元素剛開始定義為屬於自己的那個集合。

int

find

(int x, vector<

int>

&f)return f[x]

;}

void

merge

(int x,

int y)

}

//判斷兩個元素是否是在乙個集合if(

find

(x,f)

==find

(y,f)

)else

pku 2236 poj 並查集一般題

有n臺壞掉電腦,有兩種操作,o表示修好一台電腦,修好後就可以更新與其它已修好的電腦的關係了,即如果與某台已經修好的電腦在可以連線的範圍內,則兩台電腦建立聯絡,另一種操作是詢問,直接找根節點就好。是水題啊,不過有一些細節要注意啊。view code include stdio.h include st...

並查集的介紹及實現

所謂並查集,就是一種用來管理元素分組情況的資料結構。並查集一共有兩種操作 第一種操作 查詢元素a和元素b是否屬於同一組 第二種操作 合併元素a和元素b所在的組 正是因為剛好有這兩種操作,所以這種資料結構叫做並查集。並查集也是使用資料結構實現的,不過不是二叉樹。對於並查集來說,哪個結點是哪個結點的父親...

並查集的實現及優化

並查集是一種用於在森林中判斷子圖數量及點的歸屬的資料結構,由於其特殊的路徑壓縮操作,使得這一過程可以異常地快。並查集主要由乙個pre陣列以及兩個函式組成 find函式和join函式。pre陣列表示每一節點的前驅,最終已完成的並查集,每乙個子圖的所有點只有乙個前驅 這也是其高效的原因 而初始化的並查集...