【发布时间】:2017-08-02 03:12:45
【问题描述】:
对于给定的一棵树,有特定的1<=q<=10^5 查询。每个查询都有节点u、v 和K。如何找到max(KXORnode),其中node 是位于节点u 和v 之间路径中的任何节点。其中XOR 是按位运算XOR。
任何帮助,多次执行查询的最佳方式是什么。
【问题讨论】:
对于给定的一棵树,有特定的1<=q<=10^5 查询。每个查询都有节点u、v 和K。如何找到max(KXORnode),其中node 是位于节点u 和v 之间路径中的任何节点。其中XOR 是按位运算XOR。
任何帮助,多次执行查询的最佳方式是什么。
【问题讨论】:
类似于Maximum XOR value faster than just using XOR这个问题。但是在树上查询。此解决方案处于脱机状态。每个查询的答案都是max(getxor(LCA(u, v), u, K), getxor(LCA(u, v), v, K))。执行 dfs。进入节点时将其添加到树中,离开擦除时。在每个节点的 trie 存储级别的节点。然后回答这个查询可以是一个简单的遍历这个 trie。要检查是否有合适的前缀 higer 或等于 level[LCA(u, v)],您应该对节点中的存储数组进行二进制搜索。
算法复杂度为O(log(n) * log(max_node_val))
【讨论】: