ことばがありあまれどなお、 このゆめはつづいてく|

trsins

园龄:3年10个月粉丝:18关注:2

【做题记录】P4551 最长异或路径

  • P4551 最长异或路径

    • 算法:trie

题目:

给你一棵带边权的树,求 (u,v) 使得 uv 的路径上的边权异或和最大,输出这个最大值。

点数不超过 105,边权在 [0,231) 内。

题解:

f(u,v)uv 的路径上的边权异或和的值。

那么对于求出每一组 (u,v) 求出 f(u,v) 效率低下。

考虑对于树的一个指定根 rt,可以通过 rt 来得到 f(u,v)

具体地说,就是考虑 f(u,v)=f(u,rt)f(rt,v),由于 lca(u,v) 以上至根的部分重复,所以重复部分异或值为 0,那么此式子成立。

所以对于一点 u,考虑算出所以的 f(rt,u)

但是这样复杂度仍为 O(n2)。瓶颈在于每次都要计算 dis(u,rt)

所以考虑将 f(u,rt) 插入一棵 trie 中,所以就可以更快地求出 f(u,rt)

考虑用一个贪心:对于每个数转为其二进制数,从高位比较,进行异或,若异或值大显然值也大,所以顺此路线往下走。

本文作者:trsins

本文链接:https://www.cnblogs.com/trsins/p/15778170.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   trsins  阅读(26)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示