P5537 题解

blog。今天在 XDFZ 听 ljy 讲的串串(?)题,瞎写写就混了个最优解,来发个题解(


注意到树的形态不变,所以可以记录兄弟间的编号 rank。每个点就可以表示为若干 rank 构成的路径,例如下图:

然后将每个点的这个路径压成 hash,记为 Hi,并丢进 map 里。

假设从 x 开始,可以完全遍历完 alw,那么等价于存在一条 rank 路径为 Hialal+1aw

发现这是可二分的,即:如果存在 alw 的路径,那么也必定存在 all,al(l+1),,al(w1),alw 的路径。

所以直接二分出最小的 w 使得 alw 的 rank 路径存在即可。

这个问题只需要做到维护 alr 的 hash 值,线段树 / 树状数组都行,套个二分就有 O(log2) 做法了。

注意到我们可以线段树上二分,这样就做到了 O(log)。代码并不难写。


代码是最优解的一发,会有一点点抽象,不过应该看得懂 /cy。

贺了 OIWiki 的 hash 表,也可以用 unordered_map 实现,不过前者会快 4s。

code,时间复杂度 O(n+mlogm)

posted @   liangbowen  阅读(34)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示