dfs序基本类型 详细

参考

dfs序七个经典问题 ——weeping

本博文又名:手把手教你写树状数组

1. 单点修改,子树和查询

单点修改,区间查询

树状数组

维护每个点的权值:
1. 修改 x (增加 w ):单点修改——add(x,w);
2. 查询 x 的子树:区间查询——ans=query(le[x])-query(ri[x]-1);

2. 单点修改,树链和查询

首先将 uv 树链和查询转化成 uroot,vroot,lca(u,v)root,fa(lca(u,v))root 的查询,即要维护树上节点到 root 的权值和。
考虑修改点 x ,影响到的即为 x 的子树内的点到 root 的权值,所以,单点修改事实上是区间修改
至于查询,则是四个单点查询

线段树

维护每个节点到 root 的权值和:
1. 修改 x (增加 w ):区间修改——修改 [le[x],ri[x]] 区间,modify(1,le[x],ri[x],w);
2. 查询 [u,v] 链:单点查询——查询 u,v,lca(u,v),fa(

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值