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

本文介绍了一道关于树上异或操作的题目,探讨如何确定树上节点权值使得所有节点权值异或和在给定范围内。通过设定1号节点权值为0,并利用异或运算的性质,可以转换为求解特定异或值a的范围,满足所有节点权值的异或限制。文章提供了两种解决方案,包括基于递归的字典树查询方法和使用线段树优化的高效方法,最终通过差分找出满足条件的a值。
摘要由CSDN通过智能技术生成

链接: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、付费专栏及课程。

余额充值