模板 左偏樹

2022-05-09 11:33:11 字數 1284 閱讀 2639

題目描述

題解:左偏樹,一棵向左傾斜的二叉樹。

板子:

#include#include

#include

using

namespace

std;

const

int n = 100050

;template

inline

void read(t&x)

while(ch>='

0'&&ch<='9')

x = f*c;

}int

n,m,fa[n],v[n],dis[n],ls[n],rs[n];

int merge(int x,int

y)int get_top(int

x)int erase(int

x)int

main()

for(int opt,x,y,i=1;i<=m;i++)

else

}return0;

}

$upd:$

之前版本被$luogu$資料卡掉了,$get_top$操作是$o(n)$的。(0_0)

更新路徑壓縮的做法。

首先合併兩棵樹就並一下,刪除操作要求刪除堆頂元素。

肯定是不能直接刪的。

怎麼做呢,合併兒子後將自己的指標指向新的堆頂就好了。

**:

#include#include

#include

using

namespace

std;

const

int n = 100050

;template

inline

void read(t&x)

while(ch>='

0'&&ch<='9')

x = f*c;

}int n,m,ch[n][2

],v[n],dep[n],ff[n];

int findrt(int x)

int merge(int x,int

y)bool

ot[n];

intmain()

else

x =findrt(x);

ot[x] = 1

; printf(

"%d\n

",v[x]);

int now = merge(ch[x][0],ch[x][1

]); ff[x] = ff[now] =now;}}

return0;

}

左偏樹 模板

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

模板 左偏樹

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

模板 左偏樹

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