对于给定树,有一些sort
个查询。每个查询都有节点1<=q<=10^5
,u
和v
。如何查找K
XOR max(K
其中node)
是位于节点u和v之间的路径中的任何节点。其中XOR是按位node
操作。
任何帮助,这将是多次执行查询的最佳方式。
答案 0 :(得分:1)
类似于这个问题Maximum XOR value faster than just using XOR。但是在树上查询。此解决方案处于脱机状对于每个查询,答案都是max(getxor(LCA(u, v), u, K), getxor(LCA(u, v), v, K))
。执行dfs。当进入节点时,将其添加到trie,当离开擦除时。在trie商店级节点的每个节点中。然后回答这个问题可以简单地通过这个trie。要检查是否有合适的前缀高于或等于level[LCA(u, v)]
,您应该对节点中存储的数组进行二进制搜索。
算法复杂度为O(log(n) * log(max_node_val))