並查集是一種樹型的資料結構,用於處理一些不相交集合的合併及查詢問題。
並查集的思想是用乙個陣列表示了整片森林(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互相認識,所以它們可以在乙個表中。例如 如...