poj 1988 多校聯賽 帶權並查集

2022-03-21 02:12:58 字數 575 閱讀 2570

這個題的意思是初始給你n個磚塊, 維護兩個操作, m a, b表示將含有a的堆放到b堆得上面(a和b在同一堆得話那麼就忽略此操作, 有種並查集的感覺), c a查詢a下面有幾個磚塊, 其實我們可以使用帶權的並查集來維護這個題, 增加兩個變數under[i]表示i下面有幾個裝快, cnt[i]表示以i為底的堆有幾個磚塊, 然後我們就可以在並查集find函式回溯的時候就可以更新under陣列。。 **如下:

#include #include 

#include

using

namespace

std;

const

int maxn = 30000 + 100

;int

par[maxn];

intcnt[maxn], under[maxn];

void init(intn)}

int find(intx)}

void union(int x, inty)}

char s[10

];int

main()

else}}

return0;

}

帶權並查集 POJ1988

題目鏈結在這裡 題目大概的意思就是兩種操作,一種是把含有x的整個棧放到含有y的整個棧上面。另外一種是問x下面有多少個物品。物品數目是30,000以內,操作次數在100,000以內。一開始的時候我們想的是直接模擬?這個毫無疑問是不可以的。但是一眼看過去,似乎和並查集沒什麼關係?這個時候,我們從棧開始分...

poj1988 帶權並查集

帶權並查集的應用 題意 說是有n塊磚,編號從1到n,有兩種操作,第一是把含有x編號的那一堆磚放到含有編號y的那一堆磚的上面 第二是查詢編號為x的磚的下面有多少塊磚。思路 帶權並查集,用dis i 表示元素i下邊有多少個元素,num i 表示元素i所在堆的磚塊總數 或者說dis i 當前元素到樹根的距...

POJ 1988 帶權並查集

題意 傳送門 poj 1988 題解堆的合併用帶權並查集維護。對於每乙個節點 i ii,維護以此節點為根節點 堆底 的堆的元素數量 sz i sz i sz i 以及此節點到其根節點的高度 h i h i h i 設 chi ld child chil d 為合併操作的 x xx 所在集合的根節點,...