T3:树

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


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


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


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


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

全部评论

相关推荐

01-19 12:48
门头沟学院 C++
只想搞钱的鸽子很喜欢...:混账是很多的,还有那些在自己风华正茂的年纪说风凉话讥讽那些下岗前员工的。这些人都是现在职场环境这么烂的帮凶
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务