当前位置: 首页 > news >正文

P6072 『MdOI R1』Path

给定一颗无根树 \(|T|\)

求两条点不相交的路径,使得两条路径上边权的异或和加起来最大。

\[|T| \le 3\times 10^4 \]


这是一个经典 trick:

对于求两条点不相交路径,我们可以枚举点 \(x\),使得其中一条在 \(x\) 的子树内,另外一条在 \(x\) 的子树外。不难发现这样覆盖了所有的情况。


不妨以 \(1\) 为根。

那么对于这题,路径上的异或和等于前缀和的异或,那么相当于子树 内/外 选两个点异或最大。

对于子树内的情况,可以简单 01trie 启发式合并解决。复杂度 \(\mathcal O(n\log^2 n)\)

对于子树外的情况,我们先求出整个树上异或和最大的路径 \([x\rightarrow y]\)

那么很明显不在 \([1\rightarrow x]\cup[1\rightarrow y]\) 这个路径上的点的答案就是这条路径。

对于一个点,答案是整个树扣掉 dfn 上他的区间。

那么对于一条路径 \([1\rightarrow x]\) 上的每一个点,按深度从大往小考虑,他们的贡献区间单调包含,那么可以直接维护,复杂度 \(\mathcal O(n\log n)\)

总体复杂度 \(O(n\log^2 n)\)


还有更好的办法。

我们考虑假如子树外的答案相同,那么我们只需要最大化子树内的答案。

假如我们只考虑子树内的答案,那么显然一个点的祖先不会比他更劣。

\(1\) 为根考虑深度,假如我们把 \([1\rightarrow x]\cup[1\rightarrow y]\) 这条路径扣掉,整棵树会被分为若干个连通块。

这样,我们只需要考虑每个连通块的根。这意味着每个点只会被考虑到一次。

时间复杂度 \(\mathcal O(n\log n)\)

http://www.hskmm.com/?act=detail&tid=38383

相关文章:

  • P1601题解
  • 10-23 好题选讲总结
  • 关于驻马店市 2025 中小学信息学竞赛的记录(入门级)(未完)
  • 关于Markdown的使用
  • 自定义Spring Cloud LoadBalancer实践
  • 游记——驻马店市2025中小学信息学竞赛(未完)
  • 线段树上二分
  • ABP - SqlSugar [SqlSugarModule、ISqlSugarClient、SqlSugarRepository]
  • Odoo18.0 对接 京东快递
  • SAP折旧模拟超过1000条资产dump问题及解决
  • [python] 代码性能分析工具line_profiler使用指北
  • react的diff算法
  • LLM学习记录DAY11
  • ABP - 当前用户 [ICurrentUser、CurrentUser]
  • 轮次检测模型 VoTurn-80M 开源,多模态融合架构;OpenAI 收购桌面助手 Sky:实时识别屏幕自然语言交互丨日报
  • 第4天(中等题 滑动窗口、哈希表)
  • 幂函数
  • ABP - 依赖注入和属性注入
  • SAP维护汇率的关键Tcode
  • ABP vNext 框架功能模块 - 动态API(Dynamic API)
  • ABP vNext 框架功能模块 - 模块化(Modularity)
  • Devolutions Server权限提升漏洞分析与修复指南
  • AI股票预测分析报告 - 2025年10月24日 - 20:08:50
  • 题解:P14299 [JOI2023 预选赛 R2] 填充 / Painting
  • str.endswith() 类似的方法
  • 在 Astro 博客中优雅使用 51.la 统计数据
  • 2025.10.24博客
  • cgroup
  • 设计模式:代码界的 “光之巨人” 养成指南(附 C++ 实战)
  • 深度剖析OpenHarmony AI Engine:开发板端侧大模型推理插件机制全链路拆解 - 实践