並查集與帶權並查集

2021-08-15 09:40:01 字數 583 閱讀 5864

1.找點的祖先

fa[i]=i

並查集的快主要在於路徑壓縮。

(1) 遞迴寫法

int find(int x)
(2) 非遞迴寫法

int find(int x)  

return r;

}

2.合併

合併2者的集合。

void merge(int x,int y)
3.帶權並查集

一般是存下一些2者之間的具體的數量關係或者是統計集合內元素個數

那麼具體在於通過路徑壓縮完善2者的關係和合併時的判斷、轉移。

int find(int x) 

void merge(int x,int y)

小結:

並查集是乙個非常快的演算法,複雜度一般在o(n)。

使用並查集的標誌一般是2者存在一種相對關係和1者的絕對關係。

並查集,帶權並查集

題意 ignatius過生日,客人來到,他想知道他需要準備多少張桌子。然而一張桌子上面只能坐上相互熟悉的人,其中熟悉可定義成為a與b認識,b與c認識,我們就說a,b,c相互熟悉 例如a與b熟悉and b與c熟悉,d與e熟悉,此時至少需要兩張桌子。輸入 t表示樣例個數,n表示朋友個數,朋友從1到n編號...

並查集和帶權並查集

並查集是乙個很高效演算法,理解起來也很簡單,寫起來更簡單。fat i i 找到乙個點的祖先 int findfat int x 二中的方法肯定不好,因為如果資料比較極端,那麼並查集就退化成乙個鏈了 如果加入了路徑壓縮,並查集這個演算法就更高效了。int findfat int x 遞迴寫法 int ...

帶權並查集種類並查集

帶權並查集 種類並查集 例題 種類並查集 洛谷 p2024 食物鏈 與普通並查集不同是新增加屬性 group i group i 表示它和fa i 的關係,對於這三種種類,同類可以用 0表示,其他兩種分別用 1表示該結點被父節點吃,2表示該節點吃父節點。舉個例子 現在有 pa 3 4 group 3...