题目 20365

高速公路通行费

查看题解 ↗GitHub ↗如何评测
题号
20365
时间限制
1000 ms
内存限制
256 MB
标签
比赛CSP-S
来源
CSP-S 国外模拟赛 21 - T3

第 3 题 高速公路通行费 (highwaytolls)

CSP-S 复赛模拟赛 21 · 时间限制 1.0 s · 空间限制 256 MB · 89 个测试点 · 全文比较(过滤行末空格及文末回车)

本题使用文件输入输出:输入文件 highwaytolls.in,输出文件 highwaytolls.out。

题目描述

JOI 王国由 NN 个城市组成,这些城市被编号为 1 至 NN。JOI 王国内有 MM 条单向高速公路,这些高速公路被编号为 1 至 MM。通过高速公路 ii(1≤i≤M1 \le i \le M),可以从城市 AiA_i 移动到城市 BiB_i,所需时间为 LiL_i。

每次通过高速公路都会产生通行费。高速公路 ii 的基本通行费为 CiC_i,但由于 JOI 王国的劳动者厌恶加班,若离开基准时刻 0 的时间越久,通行费就会越高。具体而言,若在时刻 tt 从城市 AiA_i 出发并通过高速公路 ii,则通行费可表示为 Ci+K×∣t∣C_i + K \times |t|,其中 ∣t∣|t| 表示 tt 的绝对值。

你居住在城市 1,计划前往朋友居住的城市 NN。你希望确认是否可能通过高速公路从城市 1 移动到城市 NN,若可能,则进一步求出通行费总和的最小值。你可以自由选择移动路径和在各城市出发的时间。特别地,允许在负时刻从城市 1 出发,也允许在途中某个城市停留一段时间。

给定高速公路的信息以及常数 KK,请编写一个程序,判断是否可以通过高速公路从城市 1 移动到城市 NN,若可以,则求出通行费总和的最小值。

此外,在本题的约束条件下,若可以通过高速公路从城市 1 移动到城市 NN,则通行费总和的最小值必定为整数。

输入格式

输入以如下格式给出:

文本
N M K
A_1 B_1 L_1 C_1
A_2 B_2 L_2 C_2
...
A_M B_M L_M C_M

输出格式

若无法通过高速公路从城市 1 移动到城市 NN,则输出 −1-1。若可以,则输出一行整数,表示通行费总和的最小值。

样例

样例 1

输入:

文本
4 4 2
1 2 3 2
1 3 1 10
2 3 1 4
3 4 5 3

输出:

文本
15

样例 2

输入:

文本
4 4 0
1 2 3 2
1 3 1 10
2 3 1 4
3 4 5 3

输出:

文本
9

样例 3

输入:

文本
2 1 10
2 1 4 7

输出:

文本
-1

样例 4

输入:

文本
4 3 5
1 2 3 1
2 3 1 10
3 4 7 6

输出:

文本
37

样例 5

输入:

文本
8 8 2
1 2 1 5
5 6 3 1
2 4 10 18
3 5 3 1
1 3 4 2
5 6 2 2
2 5 2 3
6 8 1 1

输出:

文本
25

样例 6

输入:

文本
6 10 100000
4 2 212037 752027141
2 5 667097 1571491
2 1 769275 576006950
1 2 711969 526189398
5 3 733555 206320177
3 4 364807 802102091
1 4 467240 183184247
3 5 44994 15991843
5 3 613192 782356546
4 6 832593 639529758

输出:

文本
47546714005

提示

样例 1 解释

JOI 王国的城市与道路示意图如下所示。圆圈代表城市,箭头代表道路,每条道路旁标注了其对应的 LiL_i 和 CiC_i 的值(按此顺序)。圆圈内标注的数字代表该城市的编号。

按以下方式移动时,通行费总和为 15:

  • 时刻 −1-1:从城市 1 出发,前往城市 3,通行费为 10+2×∣−1∣=1210 + 2 \times |-1| = 12。
  • 时刻 0:到达城市 3,立即前往城市 4,通行费为 3+2×∣0∣=33 + 2 \times |0| = 3。
  • 时刻 5:到达城市 4。

不存在通行费总和小于 15 的移动方案,因此输出 15。

该输入样例满足子任务 2、5、6、7 的约束。

样例 2 解释

本样例与样例 1 仅在 KK 的取值上不同。

按以下方式移动时,通行费总和为 9:

  • 时刻 −3-3:从城市 1 出发,前往城市 2,通行费为 2+0×∣−3∣=22 + 0 \times |-3| = 2。
  • 时刻 0:到达城市 2,立即前往城市 3,通行费为 4+0×∣0∣=44 + 0 \times |0| = 4。
  • 时刻 1:到达城市 3,停留于城市 3。
  • 时刻 3:从城市 3 出发,前往城市 4,通行费为 3+0×∣3∣=33 + 0 \times |3| = 3。
  • 时刻 8:到达城市 4。

不存在通行费总和小于 9 的移动方案,因此输出 9。

该输入样例满足子任务 1、2、5、6、7 的约束。

样例 3 解释

无法通过高速公路从城市 1 移动到城市 2,因此输出 −1-1。

该输入样例满足子任务 2、5、6、7 的约束。

样例 5 解释

可能存在多个具有相同 (Ai,Bi)(A_i, B_i) 对的道路。

该输入样例满足子任务 2、4、5、6、7 的约束。

数据范围

  • 2≤N≤40002 \le N \le 4000。
  • 1≤M≤80001 \le M \le 8000。
  • 0≤K≤1000000 \le K \le 100000。
  • 1≤Ai≤N1 \le A_i \le N(1≤i≤M1 \le i \le M)。
  • 1≤Bi≤N1 \le B_i \le N(1≤i≤M1 \le i \le M)。
  • Ai≠BiA_i \neq B_i(1≤i≤M1 \le i \le M)。
  • 1≤Li≤10000001 \le L_i \le 1000000(1≤i≤M1 \le i \le M)。
  • 0≤Ci≤1090 \le C_i \le 10^9(1≤i≤M1 \le i \le M)。
  • 所有输入的值均为整数。

子任务

  1. (9 分)N≤100N \le 100,M≤200M \le 200,K=0K = 0。
  2. (21 分)N≤100N \le 100,M≤200M \le 200,Li≤20L_i \le 20(1≤i≤M1 \le i \le M)。
  3. (13 分)N≤100N \le 100,M=N−1M = N - 1,Ai=iA_i = i,Bi=i+1B_i = i + 1(1≤i≤M1 \le i \le M)。
  4. (23 分)N≤100N \le 100,M≤200M \le 200,并满足以下约束:
    • NN 为偶数,且对所有 1≤i≤M1 \le i \le M,满足 ⌊Bi÷2⌋−⌊Ai÷2⌋=1\lfloor B_i \div 2 \rfloor - \lfloor A_i \div 2 \rfloor = 1。其中,⌊x⌋\lfloor x \rfloor 表示不超过 xx 的最大整数。
  5. (16 分)N≤100N \le 100,M≤200M \le 200。
  6. (11 分)N≤1500N \le 1500,M≤3000M \le 3000。
  7. (7 分)无额外约束。

数据下载

题目 20365 的公开数据

正在读取文件列表…

常用命令

题目 20365 的 ROJ 命令

以下命令默认使用全局安装的 ROJ Skill,请在终端中直接执行;如果修改过 AGENT_HOME,请将命令中的 ~/.agents 替换为对应目录。