2021牛客暑期多校训练营4 E - Tree Xor(合法异或区间)

链接:E - Tree Xor

题意:

有一颗节点数为 n 的树 , 现给出每个节点权值的范围 [ l i , r i ] [l_i , r_i] [li,ri],以及每条边两端点的异或和。求点的权值有多少种不同的取值。

思路:

  1. 首先我们可以发现确定一个点的权值后,所有的的权值就都确定了 , 所以我们先让1号节点的权值为 0 , 求出其它所有点的权值 w i w_i wi。这样我们给1号节点异或上 a 后,就相当于给其它每个节点也异或 a 。这样我们就可以求出 a 的 n 个限制 w i ⨁ a ∈ [ l i , r i ] w_i\bigoplus a\in[l_i , r_i] wia[li,ri]。这样我们就可以求出 a 的一些取值区间 , 只要 a 同时满足 n 个限制就可以得到一组答案。

  2. 这题的关键就是怎么求出满足 w i ⨁ a ∈ [ l i , r i ] w_i\bigoplus a\in[l_i , r_i] wia[li,ri]的 a 的取值区间。有一种比较容易理解的方法就是类似于字典树的查询是的递归写法 。 也就是求 a ⨁ w i ≤ r i a\bigoplus w_i\leq r_i awiri的 a 的范围,就直接分类讨论一下就好了,可以参考下面的代码。同时求出 a ⨁ w i ≤ l i a\bigoplus w_i\leq l_i awili<

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值