【NOIP2015】运输计划

本文针对NOIP2015运输计划题目,介绍了一种利用树链剖分、树上差分及线段树等算法解决最优路径问题的方法。通过二分查找确定最小化最大花费,并运用树上差分技巧快速定位关键路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CJOJ P2430 - 【NOIP2015】运输计划

题意

  有一颗n个节点的树,第i条边连接uivi,边权为wi。有m个任务,每个任务要从si前往ti,花费的时间是路径上的边权之和。
  现在可以选择一条边,让这条边的边权变为0,。请你求出如果选择边可以使得最大的花费时间最小化

解法

树链剖分+树上查分+线段树+二分:
  首先,在树上求大量的点对之间的距离就是用树链剖分,这里不多说过程
  其次就是最小化最大花费,采用二分的做法:
  二分答案mid,对于所有的dismid的任务,我们将其路径标记出来。假设有k个任务超出限制,那我们需要将这k个任务dis全部减到mid之下,所以我们可以找到所有路径的公共边中的最长边x,判断dismaxwx是否mid即可
  现在的关键就在于如何找到这k条路径的公共边,如果使用线段树区间加法肯定会超时,所以使用树上差分。
  对于每一次从s前往t,将s,t的权+1;将LCA(s,t)father[LCA(s,t)]的权-1,一个点最终被覆盖的次数就是这个点所在子树的权和(因为边已经下放到了点上面,所以把覆盖次数记在点上借口)
  这里写图片描述

复杂度

O(nlogn+mlogm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值