【CF1842F】Tenzing and Tree

來源: 博客園 2023-06-27 21:17:57


(資料圖)

題目

題目鏈接:https://codeforces.com/contest/1842/problem/F給定一棵 \(n\) 個點的樹,你可以選擇其中 \(k\) 個點染黑,定義一條邊的價值為割去這條邊之后,剩下兩顆樹的黑點數量差;一棵樹的價值為所有邊的價值之和。對于 \(k\in [0,n]\),求出樹的價值的最大值。\(n\leq 5000\)。

思路

不妨設點 \(rt\) 為根,設 \(cnt[i]\) 表示以 \(i\) 為根的子樹內的黑點數量。那么如果染 \(k\) 個黑點,答案就是

\[\sum^{}_{i\neq rt}\left |(k-cnt[i])-cnt[i]\right |=\sum^{}_{i\neq rt}\left |k-2\times cnt[i]\right |\]

這個絕對值很討厭,但可以發現,如果點 \(rt\) 是所有黑點的重心的話,那么對于所有的 \(cnt[i]\ (i\neq rt)\),都一定滿足 \(2\times cnt[i]\leq k\),此時答案就是

\[(n-1)\times k - 2\times \sum_{i\neq rt}cnt[i]\]

我們發現如果選擇點 \(x\) 染黑,那么從 \(x\) 的父親到 \(rt\) 上所有點的 \(cnt\) 都要加一。那么為了最大化答案,我們只需要選擇深度最小的 \(k\) 個節點染黑即可。只需要枚舉每一個點作為 \(rt\),然后 BFS 計算所有 \(k\) 的答案即可。即使目前枚舉的點不是重心也沒關系,因為這樣就會導致有些 \(k-2\times cnt<0\),不會比最優答案大。時間復雜度 \(O(n^2)\)。

代碼

#include using namespace std;const int N=5010;int n,dep[N],ans[N];vector e[N];queue q;int main(){scanf("%d",&n);for (int i=1,x,y;i

關鍵詞:

你可能會喜歡:

亚洲国产成人久久精品99| 精品少妇ay一区二区三区| 精品国产福利在线观看91啪 | 中文国产成人精品久久不卡| 人人鲁人人莫人人爱精品| 国产精品美女午夜爽爽爽免费| 久久精品人人槡人妻人人玩| 精品美女在线观看| 成人综合久久精品色婷婷| 久久精品国产亚洲AV麻豆王友容| 精品国精品自拍自在线| 中文精品一卡2卡3卡4卡| 久久99久久99精品| 熟女人妻少妇精品视频| 国产在线91区精品| 亚洲精品无码国产片| 久久国产精品成人影院| 四虎国产精品免费永久在线| 国产成人精品视频一区| 国内精品自线在拍2020不卡| 日韩精品真人荷官无码| 亚洲精品少妇30p| 国产成人精品cao在线| 热99re久久免费视精品频软件| 亚洲国产成人精品青青草原| 亚洲AV永久无码精品| 久久人人超碰精品CAOPOREN| 无码日韩精品一区二区人妻 | 无码精品人妻一区二区三区免费看| 国产精品成人久久久久三级午夜电影 | 亚洲美女精品视频| 久久精品一区二区三区资源网| 国产在线精品福利大全| 亚洲精品岛国片在线观看| 国产精品色午夜视频免费看| 精品久久久久久中文字幕无码 | 久久综合国产乱子伦精品免费 | 思99热精品久久只有精品| 国产精品尹人在线观看| 亚洲午夜福利精品无码| 亚洲AⅤ永久无码精品AA|