2020 Multi-University Training Contest 3---- HDU--6793、Tokitsukaze and Colorful Tree(离线+树状数组)

题目链接

题面:
在这里插入图片描述

题意:
给定一棵树,根节点为1,每个点有颜色和权值两个属性。
我有两种操作,更改某个点的颜色或者更改某个点的权值。
询问每次更改之后 ∑ c o l o r [ x ] = = c o l o r [ y ]   a n d   x , y 互 不 为 祖 先 v a l [ x ]   x o r   v a l [ y ] \sum\limits_{color[x]==color[y]\space and \space x,y互不为祖先}val[x]\space xor \space val[y] color[x]==color[y] and x,yval[x] xor val[y]

题解:
对于每一种颜色的贡献都是独立的,所以我们可以枚举每种颜色对答案的贡献。
对于相同颜色的节点,每一位的贡献都是独立的,所以我们可以再去枚举每一位的贡献。
我们设 a n s [ i ] ans[i] ans[i] 为第 i i i 次修改后所要求的 s u m sum sum 的变化值。
那么我们最后再对 a n s [ i ] ans[i] ans[i] 求一遍前缀和即为答案。

考虑对于某一种颜色怎么维护这种颜色对 a n s [ i ] ans[i] ans[i] 的贡献。
我们将修改拆分为一次删除(某种颜色或者某个权值)和一次增加(某种颜色或者某个权值)。
考虑当前枚举到 c o l o r color color 颜色, 第 k k k 位, x x x 节点。

我们考虑这一次在 x x x 节点操作的贡献。
现在我们正在维护的颜色都是 c o l o r color color,正在搞第 k k k 位。
那么我们需要知道 不在 根节点到 x x x 节点上 ,不在 x x x 节点的子树中 的 0/1 的数量。
我们设 c = ( x > > k ) & 1 c=(x>>k)\And 1 c=(x>>k)&1,那么这一位的贡献就为:
a n s [ i d ] + = ( 1 < <

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值