07-19 題解

Bubble_e發表於2024-07-19

07-19 題解

B

思路

實質 : 有一個完全圖, 刪掉一些邊, 然後在圖上找一棵生成樹

但是圖的邊數是 \(n^2\) 級別的, 極其稠密

找生成樹的步驟:從一個點開始, 把與它相連的, 不在同一連通塊的點連在一起

所以我們只要確保每次都能在儘量少的步數內找到一個合法點

一共有 n 個點, 確定一個點之後, 在剩下的點裡面隨便找一個, 最多總共只會失敗 m 次

其餘細節略過 ^_^

程式碼

D

思路

先把題意理解清楚:

​ 找 k 個不相交的連通塊, 點權平均值最大

顯然, 選大小相等的連通塊才能使得平均值最大, 否則我們只取一堆連通塊中最大的平均值會更小

所以我們要做的就是找出樹上最大的連通塊, 再統計個數即可(因為有負點權, 所以求最大連通塊是有意義的)

第一問用普通的樹形 Dp 即可完成

統計個數時, 只需要從下往上統計, 遇到 dp[x] = k 的個數 + 1, 再把他的 dp 值設定為負無窮即可(避免多次統計), 這樣對點權的利用率最大, 不劣

程式碼

F

思路

首先, 每一輪都可以重新分組, 所以這不是一個樹形結構!!!

然後貪心即可

實力最大的肯定要賄賂, 然後實力最大的 n / 2 個人都可用了

考慮其後 n / 4 個人時, 這 n / 2 個人和去掉他們以後實力最強的那一個(\(a_{n / 2}\)) 都可選, 從裡面取出花費最小的即可

以此類推

程式碼

G

思路

首先, 兩個點的權值相同當且僅當他們連線的邊集相同(包括自己)

按這個重新分組, 組和組之間連邊

如果一個組的出度 > 2, 則無解(中心點為 x, 其他兩個為 x - 1, x + 1, 剩下的一個就沒辦法了)

再者, 如果有環(一定是 >= 4 元的, 3 元的邊集相同, 歸在同一組), 那麼也無解

細節略

程式碼

題目出處

CF653E Bear and Forgotten Tree 2

CF965E Short Code

CF1260E Tournament

CF623B Array GCD

CF1088E Ehab and a component choosing problem

CF1139D Steps to One

CF794D Labelling Cities