HDU 3038 帶權並查集

2021-09-26 00:09:30 字數 1180 閱讀 9024

簡單來說,給出n句話,判斷謊言的個數,謊言就是與前面真話衝突的話。帶權並查集的典型題。

個人覺得帶權並查集就是給出了結點的相對關係,已知相對關係的點就放到乙個連通的塊裡,也就是並查集有同乙個根節點。

這些相對關係又能轉化到乙個結點上,這個結點就是它們共有根節點,而轉化到同一結點的過程就是路徑壓縮的過程。權值即陣列r[ ]裡面的值是該結點到其父節點的距離,只是在路徑壓縮中該結點前面的結點的父節點都變成了根節點。

以本題為例,下圖為壓縮路徑的回溯過程,就是修改到父節點距離為到根節點的距離的過程(當然father陣列的值也變為了根節點,r[ ]的意義依然是到父親節點,只是父親節點都變為了根節點。)最後乙個圖 1結點到根節點10的距離是9,手繪失誤

利用字首和的思想,[r~l]=[r,1]-[l-1,1]的值。我們用節點x代表x的字首和,那麼給出的【l,r】=4之間的和就是r結點比l-1結點大4,就是給出了相對關係,然後再利用向量的思想進行相對關係轉換。

}//路徑壓縮

intfindfather

(int x)

return father[x]

;//要return father[x]而不是x

}void

combine

(int x,

int y,

int s)

else

}int

main()

printf

("%d\n"

,ans);}

return0;

/*理解為b的字首和比a-1的字首和大s*/

}

hdu 3038 帶權並查集)

思路 sum x 表示區間 x,f x 的和,這個可以在路徑壓縮的時候更新,對於一組資料 u,v,w 令r1 find u r2 find v 於是若r1 r2,此時u,v就有了相同的參考點,而sum u 為區間 u,r1 r2 的和,sum v 為區間 v,r2 r1 的和,於是只需判斷w sum...

hdu 3038 帶權並查集)

思路 sum x 表示區間 x,f x 的和,這個可以在路徑壓縮的時候更新,對於一組資料 u,v,w 令r1 find u r2 find v 於是若r1 r2,此時u,v就有了相同的參考點,而sum u 為區間 u,r1 r2 的和,sum v 為區間 v,r2 r1 的和,於是只需判斷w sum...

HDU 3038 帶權並查集

題目大意 n表示有乙個長度為n的陣列,接下來有m行形如x,y,d的輸入,表示從第x,個元素到第y個元素的和為d 包括x,和y 問m行輸入裡面有幾個是錯誤的 第乙個輸入是正確的 思路參考 這題你不告訴我是並查集,我怎麼想得到。複習一下帶權並查集吧。用dis陣列維護乙個點到他當前父親節點的距離,那麼在f...