P3345 [ZJOI2015]幻想乡战略游戏
P3345 [ZJOI2015]幻想鄉(xiāng)戰(zhàn)略游戲
帶修改帶權(quán)重心
這是經(jīng)典的樹上尋找關(guān)鍵點(diǎn)的題目,我們使用點(diǎn)分治處理這個(gè)問題,因?yàn)辄c(diǎn)分治的特性,就相當(dāng)于在樹上二分了。但是這與倍增不同,倍增只是在鏈上二分,而點(diǎn)分治則是在整棵樹上二分。
然后我們考慮如何二分,顯然帶權(quán)重心的位置和邊權(quán)無關(guān),并且每次只需要尋找一個(gè)點(diǎn)的2sumv>sumu2sum_v>sum_u2sumv?>sumu?那么重心一定在這個(gè)子樹內(nèi)部。也就是說有一個(gè)兒子的答案比當(dāng)前點(diǎn)小,那么重心就在這個(gè)子樹內(nèi)。我們可以維護(hù)3個(gè)變量。
sumdsumdsumd:表示當(dāng)前分治范圍內(nèi)dud_udu?的總和
sdv:sdv:sdv:表示當(dāng)前分治范圍內(nèi)dudis(u,v)d_udis(u,v)du?dis(u,v)的總和
sdvfsdvfsdvf:表示當(dāng)前分治范圍內(nèi)dudis(u,fav)d_udis(u,fa_v)du?dis(u,fav?)的總和
然后我們通過跳祖先節(jié)點(diǎn)容斥就可以計(jì)算出當(dāng)前點(diǎn)作為重心的答案,復(fù)雜度是O(logn)O(logn)O(logn)所以查詢我們可以從根開始,然后每次遍歷所有兒子,查詢對應(yīng)的答案,找到答案最小的,進(jìn)入它所對應(yīng)的子樹,然后繼續(xù)這個(gè)過程,知道所有兒子的答案都大于等于當(dāng)前點(diǎn)答案那么就找到了重心。
然后我們考慮如何修改,只會(huì)影響到當(dāng)前點(diǎn)的所有祖先節(jié)點(diǎn),所以我們暴力跳祖先進(jìn)行修改即可。然后這道題最好使用st表處理lca。
細(xì)節(jié)錯(cuò)誤:
總結(jié)
以上是生活随笔為你收集整理的P3345 [ZJOI2015]幻想乡战略游戏的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 纽约医生完成人类首次全眼移植手术
- 下一篇: 微信输入法发布 iOS / 安卓 1.2