题目描述
题解
题目要求对给定的$u$节点的子树进行操作,使其$0$级节点加上$val$,$1$级节点减去$val$,$2$级节点加上$val$,以此类推。
由于对子树进行操作,考虑节点的$dfs$序,计算每个节点第一次被访问和回溯时的时间戳,则它的子树$dfs$序都在这段区间内,由此将树上修改转化为区间修改。
观察到一个节点加上或减去$val$与其深度的奇偶性有关,假定根节点深度为$1$。我们在以深度为奇数的节点的子树修改时令整个区间加上$val$,深度为偶数的节点的子树修改时令整个区间加上$-val$,输出时奇数深度的节点加上修改的值,偶数深度的节点减去修改的值即可解决。
由于题目要求区间修改单点查询,可以用树状数组解决。注意初始值不受影响。所以不需要进行初始化(注释部分),在输出时加上初始值即可。
Code
1 |
|