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