Fork me on GitHub

2025.8.22校队分享

题面

先看本质:将 \(1\)\(v\) 的路径分成两个部分,一段全部开始,后一段全部走路。枚举断点 \(u\),在满足 \(u\)\(v\) 的路径上所有的边的海拔都大于 \(p\) 的情况下,要求 \(1\)\(u\) 的最短路最短。如何求从 \(v\) 出发可以到达的点,这些点显然满足从 \(v\) 出发,路径上所有边的海拔都大于 \(p\)。这就可以用最大生成树解决,按海拔求最大生成树,发现其实重构树是个小根堆,对于询问求出包含 \(v\) 的子树中的根节点深度最小的海拔大于 \(p\) 的子树 \(x\),那么 \(x\) 子树内的所有节点都可以由 \(v\) 开车到达!这个用树上倍增即可qwq,求深度最小的合法节点,可以用树上倍增即可,现在该子树的点都合法,现在就是要求到 \(1\) 的最短距离,直接预处理每个点,子树合并就可以了。

不放代码qwq

posted @ 2025-08-22 13:27  tony0530  阅读(7)  评论(0)    收藏  举报