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陣列表示每一節點的前驅,最終已完成的並查集,每乙個子圖的所有點只有乙個前驅 這也是其高效的原因 而初始化的並查集...