题目
给一颗树,N个节点,每个节点初始权值为1。要完成M个操作。
有2种操作:
- 将指定节点权值和1抑或
- 询问指定子树的权值和
数据范围
$$ 0 \leq N, M \leq 10^5$$
做法
因为涉及到子树的操作,所以用Dfs序将树转化为序列。相应的,操作就成了序列上的单点修改区间求和。线段树或者树状数组维护即可。
代码
线段树
|
|
树状数组
|
|
注意
线段树的下标从0开始,而树状数组的下标从1开始。
给一颗树,N个节点,每个节点初始权值为1。要完成M个操作。
有2种操作:
$$ 0 \leq N, M \leq 10^5$$
因为涉及到子树的操作,所以用Dfs序将树转化为序列。相应的,操作就成了序列上的单点修改区间求和。线段树或者树状数组维护即可。
|
|
|
|
线段树的下标从0开始,而树状数组的下标从1开始。