written on 2022-08-23
两道题好像是一模一样的类型,特此总结缅怀我逝去的 70 分,,
谈笑风生:
王子:
数据范围均在 \(10^5\) 级别
王子那题给的更明显一点,就是控制深度,求一棵子树内某一些层数的节点权值之和。思考在线做法,无果。 不妨考虑离线,这样可以有效地规避可能出现的爆空间问题。
之前有做过类似的树上题目,然后这里的话我们也考虑开一个桶,但是这里的话,实际上我们的想法是要用子树和减去第 \(dep+h+1\) 层的和,由于空间问题,这里的 \(\text{trick}\) 是在遍历子树之前加上 \(val_{dep+h+1}\),遍历完后减去 \(val_{dep+h+1}\)(这里的 \(val\) 表示某一层的权值和),这样的话就把子树内的那一层给减掉了!
然后谈笑风生这道题还需要分类讨论,这是树上问题中一种常见并且有时必要的方法,然后要思考离线!树上问题好多,如果不是树形dp,也都是离线来解决的。
总结:在做树上问题时,可以多往离线的方向考虑,辅以必要的分类讨论。具体到这两题,如果要统计子树内控制深度的权值和,我们可以开一个桶,遍历子树前和遍历子树后加减贡献来计算。
特别注意,开一个桶,遍历子树前和遍历子树后加减贡献的方法非常重要!因为这是人类变通智慧的结晶