题目:给定一棵树(题目中默认节点1为根),树的节点上可能有苹果,也可能没有。需要查询某个节点及其子节点上的苹果数量之和,并且支持节点上长苹果或苹果被摘。
分析:需要统计范围和,树状数组是个不错的选择。可是根据当前节点的编号,是没办法使用树状数组的。对于节点i,我们必须让节点i的所有子节点的编号和i连续。对此我们需要做一些预处理。
建好树,用DFS对树进行后序遍历,根据访问时间给节点重编号。这样对于节点i,其所有子节点的编号都小于i,并且是连续的。不过这样依然存在一个问题,并非所有编号比i小的节点都是i的子节点。于是对于节点i我们必须记录它子节点当中的最小编号。做到这一点并不是很难,具体见代码。
pku 3321 Apple Tree(时间戳,树状数组)
最新推荐文章于 2022-05-05 11:28:08 发布
本文介绍了一种使用树状数组和深度优先搜索(DFS)解决树形结构中苹果数量查询及更新问题的方法。通过后序遍历重新编号节点,使得对节点及其子节点的查询转化为区间查询,有效解决了问题。

888

被折叠的 条评论
为什么被折叠?



