首页 > 其他 > 详细

CF526G Spiders Evil Plan

时间:2020-03-28 16:07:02      阅读:48      评论:0      收藏:0      [点我收藏+]

\(\color{#000000}{\texttt {CF526G}}\)

先考虑单次询问。
发现 \(y\) 条路径的端点一定是叶子节点,产生的联通块最多会有 \(2y\) 个叶子。
但还是不好做。

考虑一个相似的问题
一棵有根树,选 \(k\) 个点,最大化这 \(k\) 个点到根节点路径的并的大小。

选的点肯定是叶子。
如果 \(k \geq\) 叶子个数,答案肯定是 \(n\)
否则定义一个点的贡献为 \(V_i\)\(i\) 到根节点上没被经过的点的个数。
每次选 \(V_i\) 最大的肯定最优。
性质:每个点一定在其长链顶端的父亲所在长链底端的点被选后被选。
那么 \(V_i=dep_i-dep_{fa_{top_i}}\),直接贪心。

如果有多次询问,考虑优化上述做法的复杂度。
有一个性质,直径的一个端点端点一定会被选中。
不妨以直径端点为根,那么还要选 \(2y-1\) 个叶子。
预处理下即可。

考虑原问题。
若直接用上述做法,可能 \(x\) 不在联通块内。
有两种策略进行调整

  1. 删除第 \(2y-1\) 个点,加入 \(x\) 的子树内 \(V_i\) 最大的点。
  2. 找到 \(x\) 的祖先中离 \(x\) 最近的被覆盖的点,删除它子树中被选的一个叶子,加入 \(x\) 的子树内 \(V_i\) 最大的点。

发现 \(2\) 策略不是很好维护。
但是如果 \(2\) 策略比 \(1\) 策略优,那么 \(x\) 的祖先中离 \(x\) 最近的被覆盖的点的子树中只能有 \(1\) 个被选中的点。
倍增往上跳即可。
复杂度 \(O((n+q)\log n)\)

CF526G Spiders Evil Plan

原文:https://www.cnblogs.com/Frame233/p/12587814.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!