CF526G Spiders Evil Plan 题解

CF526G Spiders Evil Plan

题意

给定一棵 n n n 个节点的无根树,每条边有边权。

q q q 次询问,每次询问给出 x , y x,y x,y,你需要选择 y y y 条树上的路径,使这些路径形成一个包含 x x x 的连通块,且连通块中包含的边权和最大。

n , q ≤ 1 0 5 n, q \le 10^5 n,q105,强制在线。

解析

先看一个引理:

引理1

如果一个树上有 2 k 2k 2k 个叶子节点,就可以用 k k k相交的路径覆盖整棵树。

证明很简单,一个叶子节点到另一个叶子节点的路径是唯一的,所以一定可以用 k k k 条路径覆盖整棵树,但如果这些路径不相交,肯定可以通过调整的方式,使得这几条路径相交。

有了引理1,我们不妨有一个想法。每次以 x x x 为根节点,考虑长链剖分,将每个叶子节点到其长链顶端的总权值进行排序,贪心选择前 2 y 2y 2y 个长链的总权值即可(前置题目BZOJ3252的做法)。

但是这种做法显然是不行的,因为每次询问需要强制在线,这意味着整棵树要换根重构,这样时间复杂度就上来了。该算法的瓶颈就在于每次需要换根,考虑如何优化。

按照上述方法,我们第一次一定会选择一个深度最大的叶子节点所在的长链,而这正好符合树的直径的性质,也就是在所有长链中,首选的肯定是树的直径的一段,那么我们就得到的引理2

每次询问中,必然存在一种方案使得直径的两端中至少有一端被选取。

根据引理2,我们就又可以得到一种新的做法,以这棵树的直径的两端为根节点分别建树,现在的问题就转化成为了在两棵树上分别选择 2 y − 1 2y-1 2y1 个叶子节点(直径也必然是叶子节点),优化它们到根节点的边的并集的权值和最大。

还是选择长链剖分,贪心选择前 2 y − 1 2y-1 2y1 个长链的边权和,但这样不一定保证经过 x x x,需稍微调整,先打通 x x x 子树中距离根节点最远的节点到根节点的路径,这样就保证了所选路径一定包含 x x x,然后再去权值总和最小的所选重链,也就是有两种做法:

1.将贡献最小的长链去掉并加入 x x x 所在长链。

2.将离 x x x 最近的长链将下半部分替换成 x x x 所在长链。

此时需要找到 x x x 向上的一个满足条件的节点,再维护一个倍增即可,时间复杂度 O ( n log ⁡ 2 n ) O(n\log_2n) O(nlog2n)

代码太丑,不放了QWQ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值