左偏樹是可合併堆的一種實現方式,可合併堆還有其他實現方式比如斜堆,然而我這種蒟蒻只會寫左偏樹。
模板裡的左偏樹為大根堆,支援合併,查詢堆頂和彈出堆頂操作,對於已經刪除的位置,查詢將返回-1,為了確保彈出的正常進行,模板裡使用的並查集沒有使用路徑壓縮,因此常數可能會比較大。
1 #include2view code#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 }
左偏樹 模板
神經病也可以寫成右偏樹 具體左偏指左節點的距離 geq 右節點的距離 距離指離最近擁有空節點的節點的距離 乙個節點的值一定 或 leq 或 geq 或 其子節點的值 由於左偏性質,每次可以合併至右邊,維護左偏性質後就可以保證複雜度 被踩爆的板子 或者是我?include define ls lson...
模板 左偏樹
洛谷模板題 一聽左偏樹這個名字就感覺左偏。左偏樹是什麼,好像就是個堆,大根堆或小根堆,可以支援合併,取堆頂元素,刪除堆頂元素,插入元素的操作。一些說明 左偏樹節點除了應有的東西,還有鍵值和距離,鍵值用於比較大小,距離是什麼?距離是這樣定義的 節點i稱為外節點 external node 當且僅當節點...
模板 左偏樹
可在log複雜度合併的堆 每個節點有乙個距離,具體定義我不知道 1.滿足堆的性質 2.左子節點距離 右子節點 3.節點距離 右子節點距離加1 按照以上的性質實現merge x,y 先選出x,y中比較大的那個 大根堆為例 再拿它的右兒子和另乙個去merge,如果merge出來不符合性質2就swap一下...