00:00:00
前言
- 做总结时不要长篇大论,且内容要有意义(难点/错点)
题目
[BJOI2018] 求和
Solution
首先
遥远的国度
Solution
有三个操作:
- 1.换根
- 2.链修改
- 3.子树查询
本题的难点在于有个换根操作,考虑换根操作对查询操作的影响。首先自己画张图可以知道,只有当前的根
- 1.若
, 的子树没有发生变化,直接查询: - ①
和 不在同一棵子树上; - ②在以
为根的树中 在 的子树中,很明显,这个贡献值也是不变的。
- ①
- 2.若
,此时需要套用一个小技巧,需要用 dfs 序辅助解决,找出 路径上 的直系儿子 ,发现对答案没有贡献的是以 为根的子树: - 在树剖中做 lca 时可以顺带记录,还要考虑一种特殊情况
,那根据子树的重儿子序一定是连续的,直系儿子 就是 的重儿子了。 - 最后通过 dfs 序,把贡献区域分为两段计算即可(画图感受)。
- 在树剖中做 lca 时可以顺带记录,还要考虑一种特殊情况
重拳出击
闲话
比较抽象,硬控我几小时,现在也只是勉强说服自己...
Solution
贪心:(木桶原理:答案是建立于最后一个解决的点)每次往距离最远的敌人走,当最远和次远一样时停止,等待即可。
小证明(乱证的):设最远的距离为
如果先去走次远,则次数为
如果先走最远,则次数为
用做差法,明显走最远的更优。
解决方法:
- F1:树上换根+dfs序
- F2:找最远和次远+分类讨论(公式解决)