传送门:POJ3764—The xor-longest Path
题目大意:在一颗带权的树上,求任意两点间路径上各边权值异或和的最大值。
题目解法:设dis(u,v)为u,v间路径上各边权值异或和。
显然dis(u,v)==dis(root,u)^dis(root,v),所以问题转换为求任意两个点i,j到root的路径上各边权值异或和最大。
于是我们用dfs预处理,把每个dis(root,i)丢进一个二进制trie中。
那每丢一个dis(root,i),显然要在trie中找能使尽量多的二进制位与dis(root,i)相反,这样才能使这两个的异或和最大,这其实就是个贪心。真相は一つしかない: 正解就是trie+贪心(逃
嗯♂~~~代码实现如下:
1 |
|