pku 3321 Apple Tree(时间戳,树状数组)

33 篇文章 0 订阅
20 篇文章 0 订阅

题目:给定一棵树(题目中默认节点1为根),树的节点上可能有苹果,也可能没有。需要查询某个节点及其子节点上的苹果数量之和,并且支持节点上长苹果或苹果被摘。

分析:需要统计范围和,树状数组是个不错的选择。可是根据当前节点的编号,是没办法使用树状数组的。对于节点i,我们必须让节点i的所有子节点的编号和i连续。对此我们需要做一些预处理。

建好树,用DFS对树进行后序遍历,根据访问时间给节点重编号。这样对于节点i,其所有子节点的编号都小于i,并且是连续的。不过这样依然存在一个问题,并非所有编号比i小的节点都是i的子节点。于是对于节点i我们必须记录它子节点当中的最小编号。做到这一点并不是很难,具体见代码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值