如何统计子树内控制深度的权值和 && ZLOJ 练习73 C 谈笑风生 & ZLOJ 练习17 B 王子 の合并总结

written on 2022-08-23

两道题好像是一模一样的类型,特此总结缅怀我逝去的 70 分,,

谈笑风生:

王子:

数据范围均在 \(10^5\) 级别

王子那题给的更明显一点,就是控制深度,求一棵子树内某一些层数的节点权值之和思考在线做法,无果。 不妨考虑离线,这样可以有效地规避可能出现的爆空间问题。

之前有做过类似的树上题目,然后这里的话我们也考虑开一个桶,但是这里的话,实际上我们的想法是要用子树和减去第 \(dep+h+1\) 层的和,由于空间问题,这里的 \(\text{trick}\) 是在遍历子树之前加上 \(val_{dep+h+1}\)遍历完后减去 \(val_{dep+h+1}\)(这里的 \(val\) 表示某一层的权值和),这样的话就把子树内的那一层给减掉了!

然后谈笑风生这道题还需要分类讨论,这是树上问题中一种常见并且有时必要的方法,然后要思考离线!树上问题好多,如果不是树形dp,也都是离线来解决的。

总结:在做树上问题时,可以多往离线的方向考虑,辅以必要的分类讨论。具体到这两题,如果要统计子树内控制深度的权值和,我们可以开一个桶,遍历子树前和遍历子树后加减贡献来计算。

特别注意,开一个桶,遍历子树前和遍历子树后加减贡献的方法非常重要!因为这是人类变通智慧的结晶

posted @ 2022-08-25 10:37  Freshair_qprt  阅读(23)  评论(0编辑  收藏  举报