洛谷 P3377 模板 左偏樹(可並堆)

2021-10-07 13:20:16 字數 755 閱讀 9092

有 n

nn 個小根堆,每個堆只有乙個數,進行兩種操作:

1 x y將第 x,y

x,yx,

y 個數分別在的小根堆合併

2 x輸出第 x

xx 個數所在的的堆的最小數,並將其刪除,有多個則刪除最先輸入的,若第 x

xx 個數已刪除,則輸出 −1-1

−1思路:左偏樹

#include

#include

#define ls s[x].son[0]

#define rs s[x].son[1]

#define maxn 100010

using

namespace std;

int n,m,t,x,y;

struct trees[maxn]

;// get 找的是下標為 x 的結點的根節點的下標

intget

(int x)

// 路徑壓縮,和並查集一樣的

// merge 是將兩個堆進行合併

intmerge

(int x,

int y)

// del 是刪除以 x 為下標的結點

void

del(

int x)

intmain()

while

(m--

)else

}return0;

}

洛谷P3377 模板 左偏樹(可並堆)

題目描述 如題,一開始有n個小根堆,每個堆包含且僅包含乙個數。接下來需要支援兩種操作 操作1 1 x y 將第x個數和第y個數所在的小根堆合併 若第x或第y個數已經被刪除或第x和第y個數在用乙個堆內,則無視此操作 操作2 2 x 輸出第x個數所在的堆最小數,並將其刪除 若第x個數已經被刪除,則輸出 ...

洛谷 P3377 模板 左偏樹(可並堆)

如題,一開始有 n 個小根堆,每個堆包含且僅包含乙個數。接下來需要支援兩種操作 1 x y 將第 x 個數和第 y 個數所在的小根堆合併 若第 x 或第 y 個數已經被刪除或第 x 和第 y 個數在用乙個堆內,則無視此操作 2 x 輸出第 x 個數所在的堆最小數,並將這個最小數刪除 若有多個最小數,...

洛谷P3377 模板 左偏樹(可並堆)

如題,一開始有n個小根堆,每個堆包含且僅包含乙個數。接下來需要支援兩種操作 操作1 1 x y 將第x個數和第y個數所在的小根堆合併 若第x或第y個數已經被刪除或第x和第y個數在用乙個堆內,則無視此操作 操作2 2 x 輸出第x個數所在的堆最小數,並將其刪除 若第x個數已經被刪除,則輸出 1並無視刪...