专栏文章
CF1179D题解
CF1179D题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @miog6tk9
- 此快照首次捕获于
- 2025/12/02 18:41 3 个月前
- 此快照最后确认于
- 2025/12/02 18:41 3 个月前
先考虑一棵基环树上有多少条简单路径,设环上有 个点,环上第 个点的子树内共有 个点。有
要最大化 ,就要最小化 ,记为 。
在原树中,两个点之间连一条边,这条新边就和两个点之间的简单路径形成了一个环,我们称该路径被这条新边覆盖了。对于一个被覆盖的点它既不是叶子节点,也不是新边两端点的LCA,那么它一定能向下扩展一个节点直到叶子节点,使得答案更优,这不难理解。也就是说,连的新边的两个端点一定是树上的叶节点(度为1的点)。
令 表示从非 的子树中的一个点向 的子树中的一个点连边,只考虑 的子树造成的贡献的最小值,即此时点 一定被覆盖,且恰有一个儿子被覆盖。于是对于非叶子节点 ,有
其中 表示点 的子树大小。特别地,对于叶子节点 ,有 。
有了 数组后,考虑如何合并答案,对于点 ,当 为新边的两端点的LCA时,我们可以朴素地枚举 的两个儿子 和 ,表示两端点分别在 和 的子树内,此时的贡献为
这样做的时间复杂度是 的,不能通过。
将上式展开,有
发现可以套用斜率优化。具体地,将点 的儿子按 从小到大排序,枚举 ,用单调队列维护一个下凸壳 。
然后就做完了。
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...