AT_qupc2014_d.切符分割

通过率:0%

AC君温馨提醒

该题目为【atcoder】题库的题目,您提交的代码将被提交至atcoder进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

QU 铁道是一家拥有 NN 个车站和 MM 条线路的铁路公司。
每个车站都被分配了一个从 00 到 N−1N-1 的唯一编号。
每条线路连接两个不同的车站,并且可以双向通行。
此外,QU 铁道采用分段计价的票价表,票价会根据距离的不同而变化。
从某个车站 A 到另一个车站 B 的单程票价,由 A 到 B 的最短距离决定,并根据票价表确定。

例如,考虑如下的线路图和票价表。

距离(km) 票价(円)
11 km - 66 km:180180 円
77 km - 1515 km:230230 円
1616 km - 2525 km:400400 円
2626 km - 4040 km:530530 円
4141 km - 6060 km:740740 円
6161 km 及以上:820820 円

在这个例子中,考虑从车站 00 到车站 66 的票价。
从车站 00 到车站 66 的最短距离为 4141 km,因此根据票价表,从 00 到 66 的单程票价为 740740 円。

在 QU 铁道中,也可以通过购买多张覆盖不同区间的车票,从一个车站到另一个车站,这被称为“分割购票”。
例如,持有以下两张车票,也可以从 00 到 66:

  • 00 到 11 的车票:66 km,180180 円
  • 11 到 66 的车票:3535 km,530530 円

此时总票价为 180+530=710180+530=710 円,比直接购买 00 到 66 的单程票更便宜。
像这样,通过分割购票,有时可以节省交通费用。

进一步地,考虑使用 33 张车票从 00 到 66:

  • 00 到 22 的车票:1313 km,230230 円
  • 22 到 44 的车票:1414 km,230230 円
  • 44 到 66 的车票:1414 km,230230 円

此时总票价为 230+230+230=690230+230+230=690 円,比前面的方法还要便宜。

节俭的胡桃小姐希望通过巧妙地分割购票来节省交通费用。
她想从车站 SS 前往车站 GG,如果可能的话,希望通过分割购票来降低票价。
但购买太多车票对她来说很麻烦。
因此,胡桃小姐决定最多只使用 22 张车票,从 SS 到 GG。
所以在上述例子中,胡桃小姐从 00 到 66 需要 710710 円。

你的任务是,计算胡桃小姐从 SS 到 GG 最少需要多少交通费用(最多使用 22 张车票)。
输入格式如下:

NN MM KK
SS GG
a0a_0 b0b_0 d0d_0
a1a_1 b1b_1 d1d_1
...
aM−1a_{M-1} bM−1b_{M-1} dM−1d_{M-1}
x0x_0 f0f_0
x1x_1 f1f_1
...
xK−1x_{K-1} fK−1f_{K-1}

  • 第 11 行给出车站数 NN、线路数 MM、票价表的区间数 KK。
  • 第 22 行给出出发车站编号 SS 和到达车站编号 GG。
  • 第 33 行到第 M+2M+2 行,每行描述一条线路,表示有一条长度为 did_i 的线路连接 aia_i 和 bib_i。
  • 第 M+3M+3 行到第 M+K+2M+K+2 行,每行描述票价表。对于任意 j (0≤j<K)j\ (0\leq j<K) 和距离 l (l≥1)l\ (l\geq 1),如果 xj≤l<xj+1x_j\leq l < x_{j+1},则距离 ll 的票价为 fjf_j。其中 xKx_K 视为无穷大。

输入中的所有变量均为整数,并满足以下约束条件:

  • 2≤N≤300002\leq N\leq 30000
  • 1≤M≤600001\leq M\leq 60000
  • 1≤K≤1001\leq K\leq 100
  • 0≤S<N0\leq S<N
  • 0≤G<N0\leq G<N
  • S≠GS\neq G
  • 对任意 0≤i<M0\leq i<M,0≤ai<N, 0≤bi<N, ai≠bi0\leq a_i<N,\ 0\leq b_i<N,\ a_i\neq b_i
  • 对任意 0≤i<j<M0\leq i<j<M,{ai,bi}≠{aj,bj}\{a_i,b_i\}\neq\{a_j,b_j\}
  • 对任意 0≤i<M0\leq i<M,1≤di≤1041\leq d_i\leq 10^4
  • 1=x0<x1<⋯<xK−1≤1091=x_0<x_1<\cdots<x_{K-1}\leq 10^9
  • 1≤f0<f1<⋯<fK−1≤1091\leq f_0<f_1<\cdots<f_{K-1}\leq 10^9
  • 存在从 SS 到 GG 的路径

请输出最多购买 22 张车票时,从 SS 到 GG 的最小总票价。输出时请在末尾添加换行符。

满足以下 33 个条件的测试点可得 2020 分:

  • 2≤N≤1002\leq N\leq 100
  • 1≤M≤2001\leq M\leq 200
  • 分割购票不会更便宜,即直接买 SS 到 GG 的单程票最优。

满足以下 22 个条件的测试点可得 2020 分:

  • 2≤N≤1002\leq N\leq 100
  • 1≤M≤2001\leq M\leq 200
7 6 6
0 6
0 1 6
1 2 7
2 3 6
3 4 8
4 5 5
5 6 9
1 180
7 230
16 400
26 530
41 740
61 820
710
  • 如题面所示。
7 6 6
4 1
0 1 6
1 2 7
2 3 6
3 4 8
4 5 5
5 6 9
1 180
7 230
16 400
26 530
41 740
61 820
400
  • 与样例 1 路线和票价表相同,但出发站和到达站不同。这种情况下,直接买 44 到 11 的单程票最优。
5 5 4
0 4
0 1 2
1 2 3
2 4 5
1 3 8
3 4 6
1 100
4 200
9 400
16 600
300
  • 从某个车站到另一个车站可能存在多条路径。

2 1 2
0 1
0 1 3
1 100
3 210
210

输入格式

第 11 行:NN MM KK
第 22 行:SS GG
第 33 行到第 M+2M+2 行:每行 aia_i bib_i did_i
第 M+3M+3 行到第 M+K+2M+K+2 行:每行 xjx_j fjf_j

输出格式

输出从 SS 到 GG 最少需要的票价(最多使用 22 张车票),末尾需换行。

说明/提示

无。

由 ChatGPT 4.1 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页