dfs序 题目小集

参考

dfs序题目练习 ——樱花庄的龙之介大人
dfs序专题学习 ——Miracle_ma

HDU 5692 +线段树

题意

给定一棵树,有两种操作:
1. 改变某个点 x 的权值;
2. 定义路径的价值为其上所有点的权值之和,询问以 x 为根的子树内的点到根的路径的价值的最大值。

分析

(画好了图上传不了就很气)

        1
        /\
    2      3
    /\
4       5

对于这样的一棵树, dfs 一遍,记录下每个节点的时间戳以及以它为根的子树中时间戳最大的节点的时间戳,即

le[u]=cnt[u],ri[u]=max{ cnt[v]|vu}

就上图而论,

id le ri
1 1 5
2 2 4
3 5 5
4 3 3
5 4 4

将原树映射到一棵线段树上,线段树的线段为 dfs 后每个节点的新编号(即时间戳,亦即 le[] ),维护的是该节点到根的路径的价值(比如说上例:[1,1]维护节点1到根的价值,[2,2]维护节点2到根的价值,[3,3]维护节点4到根的价值,[4,4]维护节点5到根的价值,[5,5]维护节点3到根的价值)。
而对点 x 的修改以及查询操作即为对区间 [le[x],ri[x]] 的修改与查询。

这么好用的嘛!

是的,我们考虑题目的要求:改变某个点 x 的权值;查询以 x

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值