T3:树
设 表示每一个 的到根求和
因为 ,所以 等价于
同时题目中的每次操作就相当于直接将 加上
于是原问题就等价于每次可以直接单点修改 ,求使得 任意两个节点 和 ,若 为 的祖先,则有 的最小修改次数
做法一:(30分)
设 表示 的子树中最小权值为 的最大子集
转移
做法二:(60分)
在刚刚的基础上优化一下dp的定义
设 表示 的子树中最小权值大于等于 的最大子集
转移
最后在 自己进行更新
做法三:(100分)
可以将上述方法差分后在用线段树合并解决,不过这里着重讲做法四
做法四:(100分)
由于每个点只会被修改1次,求最小修改次数就等价于 n-求最多不被修改的点数
考虑一种贪心方案,我们让子树内最小点权尽量大,为新来的点留位置 二分优化 LIS,现在我们依然二分,然后因为多线程合并采用启发式合并套一个有序的结构,使用multiset即可
由于这样并不能保证1号节点大于等于0所以加入一个虚根0令 且建0到1的边即可