日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CF1120D Power Tree(树形DP/构造+差分+最小生成树)

發(fā)布時(shí)間:2023/12/3 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CF1120D Power Tree(树形DP/构造+差分+最小生成树) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

解法一:樹形DP

個(gè)人覺得這個(gè)方法是比較可能想到的,但是輸出方案很惡心

先轉(zhuǎn)換題意:“無論怎樣規(guī)定葉子的初始點(diǎn)權(quán),都可以通過操作你選擇的點(diǎn)來讓所有葉子的點(diǎn)權(quán)清空”意味著每個(gè)葉子節(jié)點(diǎn)都可以通過一系列操作單獨(dú)+1、-1

模擬一下就可以發(fā)現(xiàn),以u為根的子樹中,

要想通過控制 uuuuuu的祖先(不管是 uuu 還是 uuu的祖先 都同時(shí)覆蓋了子樹內(nèi)的所有葉子節(jié)點(diǎn))
使子樹內(nèi)所有葉子節(jié)點(diǎn)均可以單獨(dú)+1、-1,

至多一個(gè)葉子節(jié)點(diǎn)未被覆蓋,

且被覆蓋的葉子節(jié)點(diǎn)一定要可以單獨(dú)+1、-1

那么狀態(tài)定義就很顯然了:

f[u][0]f[u][0]f[u][0] 表示以 uuu 為根的子樹內(nèi)葉結(jié)點(diǎn)全部被覆蓋,

f[u][1]f[u][1]f[u][1] 表示以 uuu 為根的子樹內(nèi)葉結(jié)點(diǎn)剩一個(gè)未覆蓋

狀態(tài)轉(zhuǎn)移方程為:

uuu 非葉子節(jié)點(diǎn):

f[u][1]=∑f[vi][0]?max{f[vi][0]?f[vi][1]}f[u][1]=\sum f[v_i][0]-max\{ f[v_i][0]-f[v_i][1]\}f[u][1]=f[vi?][0]?max{f[vi?][0]?f[vi?][1]}

f[u][0]=min{∑f[vi][0],f[u][1]+c[u]}f[u][0]=min\{\sum f[v_i][0],f[u][1]+c[u]\}f[u][0]=min{f[vi?][0],f[u][1]+c[u]}

uuu 為葉子節(jié)點(diǎn):

f[u][1]=0f[u][1]=0f[u][1]=0

f[u][0]=c[u]f[u][0]=c[u]f[u][0]=c[u]

至于如何輸出方案,可以看一下這里


解法二:構(gòu)造 + 差分 + 最小生成樹

博客

補(bǔ)充一下自己的理解:

區(qū)間加操作,lul_ulu? 加一個(gè)數(shù),ru+1r_u+1ru?+1 減一個(gè)數(shù),最后每個(gè)數(shù)的實(shí)際值是前面各數(shù)(包括自己)的和

題目要求第1至k個(gè)數(shù)的前綴和均為0,

則第1至k個(gè)數(shù)均為0,只有第k+1個(gè)數(shù)最后不為0(即前面的數(shù)通過操作把值全部轉(zhuǎn)移到第k+1個(gè)數(shù)去)

操作就是我們連的邊

那么就只有選擇的邊構(gòu)成連通圖才能辦到

總結(jié)

以上是生活随笔為你收集整理的CF1120D Power Tree(树形DP/构造+差分+最小生成树)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。