做永無鄉的時候,以為是主席樹合併,後來感覺不對勁,唔。
x和y是兩顆樹的根。
這個演算法是從歸併演算法那引申的。
實際運作的時候,考慮到了線段樹的本質:線段樹有效節點就是葉子節點。
好像是句廢話。
其實不是,這句話啟發我們並不需要合併一整棵樹,
~-~-~-~-~-~
我們只需要處理好葉子節點,
~-~-~-~-~-~
考慮把y樹合併到x上,那麼把y樹的葉子節點合併到x上,那麼y樹其他節點就可以拋棄了。
至於是怎麼合併,其實並不能一概而論。永無鄉每一棵樹管理的是同樣的島嶼屬性,也就是每一棵樹的葉子節點本質相同,一一對應,那麼合併的話就是對應位置的節點合併。
所以我們遞迴的時候是同步跟蹤兩顆樹對應位置的。(2-和3-)
從**上看,有兩種返回方式,一種是「1-」,一種是「5-」
1-是訪問某一棵樹的空結點的情況,那麼返回不空的那個的序號給上一層,就完成了這裡的歸併,注意,x+y不是為了加和,而是為了返回有效節點標號。
5-是中間的節點,因為獲取y樹葉子就可以,所以 中間節點 就返回x樹的原結點即可。
**就這麼短。int merge(int x,int y)
線段樹合併
今天寫dsu on tree 的時候發現不會寫線段樹合併,於是滾來寫線段樹合併部落格 對於值域相同的兩個權值線段樹x xx和y yy 假設把y yy合併到x xx上 每個節點有兩種情況 其中至少有乙個節點沒有權值 x y x y x y 直接x x y x x y x x y x 0?y x x 0...
線段樹合併
某一天馬學長給我看了乙個lca的題目,然而確實是lca 樹上差分,但是僅僅有lca和樹上差分解決不了,然後我就去面向題解程式設計了。可是這個線段樹合併是個什麼東東。然而今天看書,突然看到了這個線段樹合併。就寫一下了。mmh。p4556 vani有約會 雨天的尾巴 題目背景 深繪里一直很討厭雨天。灼熱...
線段樹合併
線段樹合併雖說是比較基礎的內容,且我一直都知道大概的實現方式,但直到最近我才正式去寫過一次,我真的太弱了啊。下面從暴力合併開始,依次介紹幾種線段樹合併的方式。直接暴力摳出線段樹中的元素,然後暴力合併。總合併時間複雜度應為 o n 2logn 應該算是暴力合併的一種優化。即,每次合併時選取較小的一棵線...