树上差分(求法与练习)

差分: 与前缀和背道而驰的算法, 给你一个数列, 要求在数组下标在 [ l , r ] [l,r] [l,r]范围内的数同时 + x +x +x, 那么只需在差分数组 a [ l ] + x , a [ r + 1 ] − x a[l]+x,a[r + 1]-x a[l]+x,a[r+1]x, 最后 ∑ i = 1 j a [ i ] \displaystyle\sum_{i=1}^{j}a[i] i=1ja[i]就是原数组 a r r [ j ] arr[j] arr[j]变化之后的值.
树上差分和最近公共祖先是两兄弟, 缺一不可
树上差分分为两种, 一种为边差分, 一种为点差分.
边差分:在经过 u u u v v v的路径上, 每条边的权值 + x +x +x, 最后求两节点的距离, 或者边被经过的次数, 我们只需使 d [ u ] + x , d [ v ] + x , d [ l c a ( u , v ) ] − 2 ∗ x d[u]+x,d[v]+x,d[lca(u,v)]-2*x d[u]+x,d[v]+x,d[lca(u,v)]2x, 这里的lca指的是, 树上两节点的最小公共祖先, 这样就使得加 x x x的效果只局限在 u . . v u..v u..v,不会向 l c a ( u , v ) lca(u,v) lca(u,v)的爸爸蔓延。
点差分:在经过 u u u v v v的路径上, 每个节点的权值 + x +x +x,最后求节点的最大权值.我们只需使 d [ u ] + x , d [ v ] + x , d [ l c a ( u , v ) ] − x , d [ l c a ( u , v ) 的 父 节 点 ] − x d[u]+x,d[v]+x,d[lca(u,v)]-x,d[lca(u,v)的父节点]-x d[u]+x,d[v]+x,d[lca(u,v)]x,d[lca(u,v)]x.因为 l c a ( u , v ) lca(u,v) lca(u,v)这个节点也需要 + x +x +x,而从 u u u l c a ( u , v ) lca(u,v) lca(

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值