BZOJ2286 消耗戰(虛樹,樹形dp)

2021-08-10 13:08:05 字數 1837 閱讀 4862

今天本tu生日,學個新演算法慶祝一下。學了虛樹,碰到每次詢問給你一些點點的樹就不虛了…

對於一棵樹,我們可以在上面用我們學過的演算法為所欲為。假設題目有多個詢問,每個詢問給出了一些點,那我們可以把這些點和及有關係的點拉出來,合併點和邊的資訊,構出虛樹,在虛樹上繼續為所欲為。

對於與詢問有關係的點,就是這些點兩兩之間的lca。把這些點按尤拉序排序,lca就是區間深度最小的點,所以k個點兩兩的lca最多k-1個。把這些點拉出來重構一棵樹。

具體實現:將點按dfs序排序,用乙個棧,維護按深度排序的一條虛樹的鏈,對於新來的點x,找到x與棧頂結點的lca,將lca以下的鏈的邊連好,全部出棧,lca進棧,就搞定了。

題面題意:給出一棵樹,每次給出k個點,讓它們全部與1號結點不連通,所刪除邊的最小邊權。

構出虛樹後,考慮樹形dp即可。對於點x,f[x]為原樹x到根路徑上的最小邊權,g[x]表示虛樹中,是x子樹內的點都不與1連通的最小代價。

若x是給出的點,g[x]=f[x],否則g[

x]=m

in(f

[x],

∑y為x

兒子g[

y])

這裡用的樹剖lca

BZOJ 2286 消耗戰(虛樹)

因為聽說多校第一場的09可以用虛樹來做,於是趕緊趁著沒比賽補一發相關知識點。臥槽寫完這篇題解之後,突然發現多校09題解給的方法不就是維護一顆動態虛樹嘛!只不過說虛樹是動態的,你需要將點插入虛樹中,就要動態維護這個樹的權值。事實上虛樹就是通過重新建樹,使得樹上的 無用決策點 全部去掉 當然相關資訊必須...

bzoj2286 消耗戰 虛樹 樹形dp

解題思路 假如只有一次詢問,可以很好想到樹形dp方程 如果u是關鍵點,則f u w fa u u 如果u不是關鍵點,則f u min w fa u u f son u 但這樣一次複雜度為o n 則總複雜度為o nm 顯然超時。像這種每次詢問都給出多個關鍵點的題,應該建虛樹,即每次詢問都只把關鍵點及其...

消耗戰 dp 虛樹

題目描述 在一場戰爭中,戰場由 n 個島嶼和 n 1 個橋梁組成,保證每兩個島嶼間有且僅有一條路徑可達。現在,我軍已經偵查到敵軍的總部在編號為 1 的島嶼,而且他們已經沒有足夠多的能源維繫戰鬥,我軍勝利在望。已知在其他 k 個島嶼上有豐富能源,為了防止敵軍獲取能源,我軍的任務是炸毀一些橋梁,使得敵軍...