数据结构---并查集
并查集,顧名思義,合并 查找 集合;
并查集是一種樹型的數(shù)據(jù)結(jié)構(gòu),用于處理一些不相交集合(Disjoint Sets)的合并及查詢問題。常常在使用中以森林來表示。
對于概念等等的這里不再贅述,直接講解應(yīng)用。
應(yīng)用1:判斷圖中有多少聯(lián)通分量 , 或者圖是否聯(lián)通(聯(lián)通分量 == 1) HDU 1213
應(yīng)用2:判斷圖是否成環(huán)? 給個例題  HDU2120 
【初始化】 MakeSet,將每一個節(jié)點(diǎn)的父節(jié)點(diǎn)置為本身;rank(秩),是節(jié)點(diǎn)構(gòu)成樹的深度
void MakeSet(){for(int i=1;i<=maxn;i++){parent[i].value = i;parent[i].rank=0;} }【查找】 一直向上查找,直到找到當(dāng)前節(jié)點(diǎn)的代表,或者說當(dāng)前節(jié)點(diǎn)所在樹的根
ps:路徑壓縮,由于查找耗時與樹的深度有關(guān),, 所以我們經(jīng)過一次查找,都把節(jié)點(diǎn)所在樹 壓縮,使之扁平化,這樣樹的深度就大大減小了。
【合并】
因?yàn)閺纳厦娴牟檎铱梢钥闯?#xff0c;查找的效率主要影響因素是樹的深度,也就是秩,所以我們在合并兩顆樹的時候,把秩較小的接在 秩較大的樹的根節(jié)點(diǎn)上
這樣,樹的秩就不會加深,如果 兩棵樹的秩相等,那么深度也只會加1;
轉(zhuǎn)載于:https://www.cnblogs.com/chaiwenjun000/p/5320985.html
總結(jié)
以上是生活随笔為你收集整理的数据结构---并查集的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: Python -- 使用模块中的函数
- 下一篇: Verilog inout 双向口使用和
