参考
dfs序题目练习 ——樱花庄的龙之介大人
dfs序专题学习 ——Miracle_ma
HDU 5692 +线段树
题意
给定一棵树,有两种操作:
1. 改变某个点 x 的权值;
2. 定义路径的价值为其上所有点的权值之和,询问以
分析
(画好了图上传不了就很气)
1
/\
2 3
/\
4 5
对于这样的一棵树, dfs 一遍,记录下每个节点的时间戳以及以它为根的子树中时间戳最大的节点的时间戳,即
le[u]=cnt[u],ri[u]=max{
cnt[v]|v∈以u为根的子树}
就上图而论,
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 的修改以及查询操作即为对区间
这么好用的嘛!
是的,我们考虑题目的要求:改变某个点 x 的权值;查询以