思路:
设从根到点$x$的路径异或和为$d_x$, 则从$x$到$y$的路径异或和是$d_x \oplus d_y$
原因很显然: 从根到$lca(x,y)$的路径异或和$d_{lca(x,y)}$同时会出现在$d_x$和$d_y$中, 两个异或之后就抵消了.
于是题目变成了找最大的两个值的异或的和. 显然使用01trie解决.
时间复杂度为$O(nloga)$, $a$表示值域上界.
代码:
1 |
|
设从根到点$x$的路径异或和为$d_x$, 则从$x$到$y$的路径异或和是$d_x \oplus d_y$
原因很显然: 从根到$lca(x,y)$的路径异或和$d_{lca(x,y)}$同时会出现在$d_x$和$d_y$中, 两个异或之后就抵消了.
于是题目变成了找最大的两个值的异或的和. 显然使用01trie解决.
时间复杂度为$O(nloga)$, $a$表示值域上界.
1 | #include <cstdio> |