博客
关于我
Luogu P4551 最长异或路径 (字符串,01Trie)
阅读量:231 次
发布时间:2019-03-01

本文共 458 字,大约阅读时间需要 1 分钟。

给定n个点(1 ≤ n ≤ 1e5),n-1条带权无向边u, v, w。要求找出最大的异或路径,即所有最短路径中的异或和的最大值。

首先,选择一个随机点作为根节点s,计算从根节点到每个点i的路径异或和,保存在num[i]中。这样,点i和点j之间的路径异或和为num[i] ^ num[j]。

接下来,利用num[i]的值构建二进制Trie。每个数的二进制表示依次插入Trie中,层次遍历每一位,记录路径上的最大异或值和出现次数。

对于每个num[i],使用Trie查询能找到与之异或后结果最大的数,时间复杂度为O(30)。

最终,遍历所有num[i],找到最大异或值。

以下是实现步骤:

  • 计算路径异或和:选择根节点,计算每个节点到根节点的路径异或和。
  • 构建二进制Trie:将每个num[i]插入Trie,记录每个二进制位的路径。
  • 查询最大异或值:遍历所有num[i],使用Trie查询最大异或值。
  • 这种方法利用了二进制Trie的高效查询特性,将问题转化为常见的异或最大值问题,确保算法在时间和空间复杂度上都得到优化。

    转载地址:http://lrst.baihongyu.com/

    你可能感兴趣的文章
    Python变量/运算符/函数/模块/string
    查看>>
    python发送邮件的时候出现 error (535, b‘5.7.3 Authentication unsuccessful‘) 解决方法
    查看>>
    python系列【仅供参考】:python flask框架 debug功能
    查看>>
    python发送notes邮件_使用python在Lotus Notes中发送邮件
    查看>>
    Python双版本下创建一个Scrapy(西瓜皮)项目
    查看>>
    Python双版本下No module named 'requests'
    查看>>
    python及pycharm2018软件安装教程
    查看>>
    python去重txt文本_Python实现的txt文件去重功能示例
    查看>>
    python去掉列表的逗号,从Python列表项中删除标点符号
    查看>>
    Python卸载所有包
    查看>>
    python单线程下实现多个socket并发
    查看>>
    Python单元测试框架介绍(超详细~)
    查看>>
    Python单元测试框架
    查看>>
    python单元测试之unittest
    查看>>
    Python单元测试unittest实战
    查看>>
    Python单元测试-模拟VS补丁
    查看>>
    python协程实时输出_Python 协程以及事件循环的问题,怎么知道 IO 读取结束了呢?...
    查看>>
    Python十进制&;包提供错误的结果
    查看>>
    Python化身“安全老中医”:一键搞定工控系统漏洞,从零基础到精通,收藏这篇就够了!
    查看>>
    Python加速运行技巧
    查看>>