树上序列

dfs序(一棵树被dfs 时所经过的节点的顺序)

一般的作用是维护子树信息,如果记录dfni 表示i 号点的dfs 序,sizei
表示i 号点的子树大小,那么x 是y 的祖先等价于:
dfny ∈(dfnx,dfnx + sizex - 1];

维护一棵树,支持:子树加,链加,单点求值

因为是dfs序,所有子树的序号一定是连续的。
所以子树加相当于区间加。(T1)
而链加相当于单点加:(T2)
设u到v加w,那么u+w, v+w, lca(u,v)-w, fa[lca(u,v)]-w.
对于单点求值就是 T1的单点求值+T2的区间求和(这个点的这棵子树)。

维护一棵树,支持:子树加,链加,子树求和

子树加,相当于 dfs 序列上的区间加。
链加,看作一个点到根上的路径加。
一个修改 (x,W) 对 y 有贡献当且仅当 y 为 x 的祖先。
且贡献为(depx − depy + 1) ∗W。
分离变量,即为 depx ∗W+ (1 − depy) ∗W。
维护三个区间和即可。
1.子树加,子树求和(区间加,区间求和)。
2.单点加,子树(区间)求和,维护depx ∗W。
3.单点加,子树(区间)求和,维护W。

维护一棵树,支持:单点加,链求和。

对单点所在的子树区间加。
设求u到v这条链的值(单点求值)
ans=ask(u)+ask(v)-ask(lca(u,v))-ask(fa[lca(u,v)]);

维护一棵树,支持:子树加,链求和。

链求和,看作一个点到根上的路径求和。
一个修改 (x,W) 对 y 有贡献当且仅当 x 为 y 的祖先,
且贡献为(depy − depx + 1) ∗W。
分离变量,即为 (depy + 1) ∗W− depx ∗W。
维护两个区间和即可。
1子树(区间)加,单点求值,维护W。
2子树(区间)加,单点求值,维护depx ∗W。

维护一棵树,支持:子树加,链加,链求和。

子树加,链求和见上。下面处理链加,链求和。
(x,W) 【x到根节点+W】对 y 的贡献分开讨论:
若 x 为 y 的祖先,那么贡献为 depx ∗W。
若 y 为 x 的祖先,那么贡献为 depy ∗W
分开4个区间维护贡献即可。
1、2、子树加,链求和(见上)。
3、x 为 y 的祖先,子树(区间)加,单点求值,维护depx ∗W。(不和上面混为一个)。
4、y 为 x 的祖先,单点加,子树(区间)求和,维护W。

。:.゚ヽ(。◕‿◕。)ノ゚.:。+゚

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值