模板 左偏樹

2022-09-04 01:15:08 字數 796 閱讀 8735

左偏樹是可合併堆的一種實現方式,可合併堆還有其他實現方式比如斜堆,然而我這種蒟蒻只會寫左偏樹。

模板裡的左偏樹為大根堆,支援合併,查詢堆頂和彈出堆頂操作,對於已經刪除的位置,查詢將返回-1,為了確保彈出的正常進行,模板裡使用的並查集沒有使用路徑壓縮,因此常數可能會比較大。

1 #include2

#define maxn 1000

3struct node;

4int

n,op,ori[maxn];

5void swp(int &x,int &y)

6struct

ltt7

return fa[p];}

11int fi(int p)

12void

ini()

13

14int merge(int p,int

q)15

23void mer(int p,int q)//

合併p位置和q位置所在的左偏樹

2428

int top(int p)//

返回p位置所在堆的堆頂,如果p位置已經被刪除,返回-1

2933

int exmax(int p)//

彈出p位置所在堆的堆頂,如果p位置已被刪除,返回-1

3441

}t;42

intmain()

4353

else

if(flag==2)

54else55}

56return0;

57 }

view code

左偏樹 模板

神經病也可以寫成右偏樹 具體左偏指左節點的距離 geq 右節點的距離 距離指離最近擁有空節點的節點的距離 乙個節點的值一定 或 leq 或 geq 或 其子節點的值 由於左偏性質,每次可以合併至右邊,維護左偏性質後就可以保證複雜度 被踩爆的板子 或者是我?include define ls lson...

模板 左偏樹

洛谷模板題 一聽左偏樹這個名字就感覺左偏。左偏樹是什麼,好像就是個堆,大根堆或小根堆,可以支援合併,取堆頂元素,刪除堆頂元素,插入元素的操作。一些說明 左偏樹節點除了應有的東西,還有鍵值和距離,鍵值用於比較大小,距離是什麼?距離是這樣定義的 節點i稱為外節點 external node 當且僅當節點...

模板 左偏樹

可在log複雜度合併的堆 每個節點有乙個距離,具體定義我不知道 1.滿足堆的性質 2.左子節點距離 右子節點 3.節點距離 右子節點距離加1 按照以上的性質實現merge x,y 先選出x,y中比較大的那個 大根堆為例 再拿它的右兒子和另乙個去merge,如果merge出來不符合性質2就swap一下...