1 条题解
-
0
解法思路
核心思想:分类处理 + 树上差分
根据油箱容量 的大小采用不同的优化策略:
- 大 ():路径上加油点稀疏,直接模拟
- 小 ():路径上加油点密集,使用前缀和优化
算法框架
1. 预处理
- LCA 预处理:使用倍增法预处理每个节点的 级祖先,用于快速求两点间路径
- DFS 序与深度:记录每个节点的深度信息
2. 大 处理 ()
- 从路径起点和终点分别向 LCA 方向模拟跳跃
- 每次跳跃 条边,累加经过节点的加油成本
- 使用 DFS 栈记录路径,快速找到 级祖先
3. 小 处理 ()
- 对每个 值单独处理
- 在 DFS 过程中维护前缀和数组 sum[x],记录从根节点到 路径上每隔 个节点的成本之和
- 利用前缀和快速计算任意路径上的加油成本
关键技巧
- LCA 优化: 时间求任意两点最近公共祖先
- 分类处理:设定阈值 ,平衡时间与空间复杂度
- 树上差分:对小 使用前缀和技巧, 计算路径成本
- DFS 栈:记录当前 DFS 路径,快速访问 级祖先
复杂度分析
- 时间复杂度:,其中 为阈值
- 空间复杂度:
- 1
信息
- ID
- 3205
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 2
- 已通过
- 1
- 上传者