树上操作杂题

1.给定一个树T,有点权,查询路径点权和
  • 分析与解:树上前缀和:预处理每个点到根的路径: d i s [ i ] dis[i] dis[i]
    • d i s ( x , y ) = d i s [ x ] + d i s [ y ] − d i s [ l c a ( x , y ) ] − d i s [ f a [ l c a ( x , y ) ] ] dis(x,y)=dis[x]+dis[y]-dis[lca(x,y)]-dis[fa[lca(x,y)]] dis(x,y)=dis[x]+dis[y]dis[lca(x,y)]dis[fa[lca(x,y)]]
2.给定一个树T,有点权,支持区间修改( ( x , y , v ) = x , y 之 间 的 路 径 边 权 + v ) (x,y,v)=x,y之间的路径边权+v) (x,y,v)=x,y+v),查询单点点权
  • 树上差分:预处理每个点到根的路径: d i s [ i ] dis[i] dis[i]
    • 修改 ( x , y , v ) : (x,y,v): (x,y,v):
      • 1. d i s [ x ] + v 1.dis[x]+v 1.dis[x]+v
      • 2. d i s [ y ] + v 2.dis[y]+v 2.dis[y]+v
      • 3. d i s [ l c a ( x , y ) ] − v 3.dis[lca(x,y)]-v 3.dis[lca(x,y)]v
      • 4. d i s [ f a [ l c a ( x , y ) ] ] − v 4.dis[fa[lca(x,y)]]-v 4.dis[fa[lca(x,y)]]v
    • 查询x点权:查询x子树和
3.给定一个树T,有边权,问有多少条路径异或和为0?
  • 1.x到y的路径异或和=x到根的路径异或和异或y到根的路径异或和
    • reason:正常x到y的路径异或和=x到根的路径异或和异或y到根的路径异或和去掉2^lca到根的路径异或和(=0!!!)
  • 2.so,x到y的路径异或和为0means:x到根的路径异或和=y到根的路径异或和
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值