#L2601. 「NOIP2011」观光公交

「NOIP2011」观光公交

观光公交车问题

题目描述

风景迷人的小城 YY 市,拥有 nn 个美丽的景点。由于慕名而来的游客越来越多,YY 市特意安排了一辆观光公交车,为游客提供更便捷的交通服务。

观光公交车在第 00 分钟出现在 11 号景点,随后依次前往 2,3,,n2, 3, \dots, n 号景点。从第 ii 号景点开到第 i+1i+1 号景点需要 DiD_i 分钟。任意时刻,公交车只能往前开,或在景点处等待。

设共有 mm 个游客,每位游客需要乘车 11 次从一个景点到达另一个景点,第 ii 位游客在 TiT_i 分钟来到景点 AiA_i,希望乘车去景点 BiB_i (Ai<Bi)(A_i<B_i)。为了使所有乘客都能顺利到达目的地,公交车在每站都必须等待需要从该景点出发的所有乘客都上车后才能出发开往下一景点。假设乘客上下车不需要时间。

一个乘客的旅行时间,等于他到达目的地的时刻减去他来到出发地的时刻。因为只有一辆观光车,有时候还要停下来等其他乘客,乘客们纷纷抱怨旅行时间太长了。于是聪明的司机 ZZZZ 给公交车安装了 kk 个氮气加速器,每使用一个加速器,可以使其中一个 DiD_i11。对于同一个 DiD_i 可以重复使用加速器,但是必须保证使用后 Di0D_i\geq0

那么 ZZZZ 该如何安排使用加速器,才能使所有乘客的旅行时间总和最小?


输入格式

11 行是 33 个整数 nn, mm, kk,每两个整数之间用一个空格隔开。分别表示景点数、乘客数和氮气加速器个数。

22 行是 n1n-1 个整数,每两个整数之间用一个空格隔开,第 ii 个数表示从第 ii 个景点开往第 i+1i+1 个景点所需要的时间,即 DiD_i

33 行至 m+2m+2 行每行 33 个整数 TiT_i, AiA_i, BiB_i,每两个整数之间用一个空格隔开。第 i+2i+2 行表示第 ii 位乘客来到出发景点的时刻,出发的景点编号和到达的景点编号。


输出格式

共一行,包含一个整数,表示最小的总旅行时间。


样例

输入

3 3 2
1 4
0 1 3
1 1 2
5 2 3

输出

10

样例解释

D2D_2 使用 22 个加速器,从 22 号景点到 33 号景点时间变为 22 分钟。

公交车的时间线:

  • 11 分钟从 11 号景点出发
  • 22 分钟到达 22 号景点
  • 55 分钟从 22 号景点出发
  • 77 分钟到达 33 号景点

乘客旅行时间:

  • 11 个旅客:70=77-0 = 7 分钟
  • 22 个旅客:21=12-1 = 1 分钟
  • 33 个旅客:75=27-5 = 2 分钟

总时间:7+1+2=107+1+2 = 10 分钟。


数据范围与提示

数据比例 约束条件
8%8\% k=0k=0
16%16\% k=1k=1
32%32\% 2n502 \leq n \leq 50m1000m \leq 1000k20k \leq 20Di10D_i \leq 10Ti500T_i \leq 500
48%48\% n100n \leq 100m1000m \leq 1000k100k \leq 100Ti104T_i \leq 10^4
80%80\% n1000n \leq 1000m104m \leq 10^4k105k \leq 10^5Di100D_i \leq 100Ti105T_i\leq 10^5
100%100\% 1n,m1051 \leq n,m \leq 10^50k5×1060 \leq k \leq 5\times 10^60Di10000 \leq D_i \leq 10000Ti1060 \leq T_i \leq 10^6

算法思路

关键观察

  1. 公交车运行规则:公交车在站点必须等待所有需要上车的乘客都到达后才能出发
  2. 加速器效果:减少路段行驶时间,可能产生连锁效应,让后续站点更早出发
  3. 贪心策略:每次选择能减少最多总旅行时间的路段进行加速

核心变量

  • arrive[i]:公交车到达站点 ii 的最早时间
  • latest[i]:站点 ii 最晚乘客的到达时间
  • off[i]:在站点 ii 下车的乘客数量
  • sum[i]:从站点 11ii 下车乘客数量的前缀和

算法步骤

  1. 预处理每个站点的最晚乘客到达时间
  2. 计算不使用加速器时的基础旅行时间
  3. 使用贪心策略,每次选择能节省最多时间的路段进行加速
  4. 重复步骤3直到加速器用完或无法再减少时间

时间复杂度

  • 预处理O(n+m)O(n + m)
  • 贪心过程O(kn)O(k \cdot n)(可优化到 O(klogn)O(k \log n)
  • 总体:在数据范围内可行