树上差分

树上差分

1.算法分析

树上差分是把差分思想运用到树上的技巧,常数小,好写,思想简单。**处理的问题是:**给定两个点l、r,将l~r路径上所有的边(点)都加k,然后求每条边(点)的权值。

1.1 边差分

**问题描述:**给定两个点l、r,将l~r路径上所有的边都加k,然后求每条边的权值。

处理方法: f [ i ] f[i] f[i] 表示 i->fa[i]这条边的权值, f [ l ] + = k , f [ r ] + = k , f [ l c a ( l , r ) ] − = 2 ∗ k f[l] += k, f[r] += k, f[lca(l, r)] -= 2*k f[l]+=k,f[r]+=k,f[lca(l,r)]=2k, dfs计算f[i]即可。

这里借用秦淮案大佬的图[https://www.cnblogs.com/gzh-red/p/11185914.html]。

微信截图_20201017233208.png

只需要通过dfs求得f[]数组,即可知道每个f[i]。

1.2 点差分

**问题描述:**给定两个点l、r,将l~r路径上所有的点都加k,然后求每个点的权值。

处理方法:$ f[i]$ 表示i这个点的权值,$ f[l] += k, f[r] += k, f[lca(l, r)] -= k, f[fa[lca(l, r)]] -= k$, dfs计算f[i]即可。

2.典型例题

CF191C - Fools and Roads

题意: 有一颗 n 个节点的树,k次旅行,每次旅行从l走到r,问每一条边被走过的次数。

题解: 裸的lca+树上差分

代码:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值