QOJ.ac

QOJ

実行時間制限: 2 s メモリ制限: 2048 MB 満点: 100

#2525. 电动汽车

統計

电动汽车(EV)是一种使用一个或多个电动机作为动力源的替代燃料汽车,取代了柴油或汽油等内燃机。电动汽车将电能存储在能量存储设备(如电池)中,并通过电动机为车辆的轮子提供动力。由于其有限的能量存储容量,电动汽车必须通过接入电源进行定期充电。

平面上有 $n$ 个村庄。任意两个村庄之间只有一条道路。因此,连接各个村庄的道路总数恰好为 $n \times (n - 1) / 2$ 条。设两个村庄 $A$ 和 $B$ 的坐标分别为 $(a, b)$ 和 $(c, d)$。则 $A$ 和 $B$ 之间的道路长度定义为 $d(A, B) = |a - c| + |b - d|$,这被称为 $A$ 和 $B$ 之间的距离。为方便起见,假设 $A$ 和 $B$ 之间的距离等同于电动汽车在 $A$ 和 $B$ 之间移动所需的电量。也就是说,电动汽车消耗单位电量(例如电量 1)可以移动单位距离(例如距离 1)。

每个村庄都有一个电动汽车充电站,充电成本因村庄而异。设 $c(A)$ 为在村庄 $A$ 充电时每单位电量的成本。根据上述假设,在村庄 $A$ 电量为零的电动汽车,若要到达村庄 $B$,必须支付至少 $c(A) \times d(A, B)$ 的费用。

民秀(Minsu)需要驾驶他的电动汽车从村庄 $S$ 前往村庄 $T$。出发前,电动汽车在 $S$ 处处于放电状态,即电量为零。此外,电动汽车的电池最大充电容量为 $W$。也就是说,电动汽车存储的电量不能超过 $W$。因此,如果电动汽车充满电,它最多可以移动距离 $W$。在从 $S$ 到 $T$ 的途中,民秀最多允许进行 $\Delta$ 次充电停靠。此外,在起始村庄 $S$ 的充电也被视为一次充电停靠。民秀需要找到从 $S$ 到 $T$ 的最便宜移动方式。

例如,上图显示了平面上的五个村庄,五边形中的数字代表充电成本。设 $W = 3$ 且 $\Delta = 2$。图中展示了从 $S$ 到 $T$ 的三种路径 $P_1, P_2$ 和 $P_3$,分别用红色、紫色和蓝色表示。在 $P_1$ 中,电动汽车在 $S$ 处充电电量 2,并在 $(1, 3)$ 处再次充电电量 2。因此,总共花费 $2 \times 4 + 2 \times 4 = 16$。对于 $P_2$ 的情况,电动汽车在 $S$ 处充满电,到达 $(2, 2)$ 时电池中剩余电量 1。然后电动汽车在 $(2, 2)$ 处仅充电电量 1 以到达 $T$。因此,总共花费 $3 \times 4 + 1 \times 5 = 17$。最后,在 $P_3$ 中,电动汽车在 $S$ 处充电电量 2 以移动到 $(3, 1)$,并在 $(3, 1)$ 处再次充电电量 2。因此,总共花费 $2 \times 4 + 2 \times 3 = 14$。成本 14 是最小值,$P_3$ 是从 $S$ 到 $T$ 最便宜的路径。

给定包含 $S$ 和 $T$ 在内的 $n$ 个村庄的坐标、每个村庄的充电成本、电动汽车电池的最大充电容量 $W$ 以及任意正整数 $\Delta$,编写一个程序,找出在最多 $\Delta$ 次充电停靠的情况下,从 $S$ 到 $T$ 的最便宜移动方式。

输入格式

程序从标准输入读取数据。输入以一个整数 $n$ ($2 \le n \le 1,000$) 开头,表示村庄的数量。接下来的 $n$ 行,每行包含三个整数 $a, b$ 和 $c$ ($0 \le a, b \le 10^6$ 且 $1 \le c \le 10^4$),其中 $(a, b)$ 是村庄的坐标,$c$ 是该村庄的充电成本。这里,在 $n$ 行中,第一行包含起始村庄 $S$ 的坐标,第二行包含目的地村庄 $T$ 的坐标。注意,所有村庄的坐标都是不同的。下一行包含一个整数 $W$ ($1 \le W \le 10^5$),表示电动汽车电池的最大充电容量。最后一行包含一个正整数 $\Delta$ ($1 \le \Delta \le 10$),表示电动汽车从 $S$ 到 $T$ 行驶过程中允许的最大充电次数。在起始村庄 $S$ 的充电被视为一次充电停靠。

输出格式

程序将结果写入标准输出。仅打印一行。该行应包含电动汽车在最多 $\Delta$ 次充电停靠的情况下从 $S$ 到 $T$ 的最便宜移动成本。如果不存在这样的路径,则该行应包含 -1。

样例

样例输入 1

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

样例输出 1

3

样例输入 2

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

样例输出 2

14

样例输入 3

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

样例输出 3

-1

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.