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