关于树上信息的维护

1.Dfs序的一些奇奇怪怪的操作和改进

所谓dfs序,就是一棵树被 dfs 时所经过的节点的顺序。一般的作用是维护子树信息,如果记录 dfn[i] 表示 i 号点的 dfs 序,sze[i]表示 i 号点的子树大小,那么 x 是 y 的祖先等价于:dfn[y] ∈ [dfn[x], dfn[x]+sze[x]−1]

那么我们就可以利用dfs序来进行一些树上的操作:

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

        对于子树加,相当于是 dfs 序列上的区间加。

        对于链加,可以看作是一个点到根上的路径加。

        可以把这次的修改放到这个点上,然后单点查询的时候在子树内区间询问贡献。

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

        对于子树加,相当于是 dfs 序列上的区间加。

        对于链加,可以看作是一个点到根上的路径加。

        一个修改 (x,W) 对 y 有贡献当且仅当 y 为 x 的祖先。且贡献为(dep[x]−dep[y]+1)∗W。

        分离变量,即为dep[x]∗W+(1−dep[y])∗W。

        所以维护两个区间和就行了。

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

        对于链求和,可以看作是一个点到根上的路径求和。

        一个修改 (x,W) 对 y 有贡献当且仅当 x 为 y 的祖先。

        相当于支持区间加,单点求值。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值