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

posted on 2024-07-19 20:39  Bubble_e  阅读(17)  评论(0)    收藏  举报