T3:树

表示每一个 的到根求和
因为 ,所以 等价于
同时题目中的每次操作就相当于直接将 加上
于是原问题就等价于每次可以直接单点修改 ,求使得 任意两个节点 的祖先则有 的最小修改次数


做法一:(30分)
表示 的子树中最小权值为 的最大子集
转移


做法二:(60分)
在刚刚的基础上优化一下dp的定义
表示 的子树中最小权值大于等于 的最大子集
转移
最后在 自己进行更新


做法三:(100分)
可以将上述方法差分后在用线段树合并解决,不过这里着重讲做法四


做法四:(100分)
由于每个点只会被修改1次,求最小修改次数就等价于 n-求最多不被修改的点数
考虑一种贪心方案,我们让子树内最小点权尽量大,为新来的点留位置 二分优化 LIS,现在我们依然二分,然后因为多线程合并采用启发式合并套一个有序的结构,使用multiset即可
由于这样并不能保证1号节点大于等于0所以加入一个虚根0令 且建0到1的边即可

全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务