POJ1988(帶權並查集,搬磚塊)

2021-06-29 04:01:55 字數 665 閱讀 1054

題意:

可以這樣理解,有n快方形積木,一開始都是單獨的放到哪,然後有兩種操作

1 m a b 把a所在的那一堆落到b所在那一堆的上面(一開始自己是一堆)

2 c a 問a下面有多少個積木

思路: 

感覺很久以前杭電上見過這個題目,比較簡單的帶權並查集,我們可以維護兩個權來滿足要求,第乙個就是記錄集合元素個數,就是合併的時候更新a所在的祖宗節點的距離權值,第二個權值就是距離權值,記錄每個元素距離根節點的距離,然後更新就是簡單更新沒啥說的,還有就是簡簡單單敲完提交後wa了一發,哎!丟臉,還好不是比賽,讓我想起了有一場亞洲賽的水題我果斷敲完,然後上去1wa。這個題目我wa是因為忘記了輸出距離權值前要先查詢一下,也就是更新一下,因為用了路徑壓縮,路徑壓縮的最理想狀態是乙個點,四周連著所有本集合的其他點,但是要想把乙個路徑上壓縮成一對多,起碼要查詢就是更新一便,因為在動態的更新的時候當前所有狀態並是不理想路徑壓縮後的狀態,這個自己畫畫很容易理解,哎!記得當時還經常給小學弟講這個問題呢!。

#include

#define n 30000 + 10

int mer[n] ,sum[n] ,s_x[n];

int finds(int x)

int main ()

else

}return 0;

}

帶權並查集 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 所在集合的根節點,...