QOJ.ac

QOJ

Time Limit: 10 s Memory Limit: 1024 MB Total points: 40

#12274. 小马快递

Statistics

1860 年,驿马快递(Pony Express)是连接美国东西海岸最快的邮件投递系统。该系统服务于 $N$ 个不同的城市。每个城市都有一匹马(正如“一马当先”这个词所暗示的);每匹马都以恒定的速度奔跑,并且在变得过于疲劳而无法继续之前,有一个最大总行驶距离。

驿马快递的骑手从出发城市的马开始骑行。每当骑手到达一个城市时,他们可以选择继续使用当前的马,或者换成该城市的马;换马是瞬间完成的。马永远没有休息的机会,所以每当一匹马的最大总行驶距离被“用掉”一部分时,它就永远被用掉了!当骑手到达目的地城市时,邮件即被送达。

城市之间的路线是通过公司所有者、立法者、工会代表和表亲 Pete 之间复杂的谈判建立的。这意味着城市之间的距离不一定符合常理:例如,它们不一定符合三角不等式,而且从城市 A 到城市 B 的距离可能与从城市 B 到城市 A 的距离不同!

你是一位时间旅行的企业家,从未来带来了一台快速计算机。单台计算机不足以让你建立电子邮件服务并使驿马快递过时,但你可以用它为驿马快递制定最优的路线规划。给定关于城市间路线和每个城市马匹的所有数据,以及一系列出发和到达城市对,你能快速计算出每次投递所需的最短时间吗?(你应该将所有这些投递视为独立的;在一条路线上使用城市/马匹不会使它们在其他路线上不可用。)

输入格式

输入的第一行给出了测试用例的数量 $T$。接下来是 $T$ 个测试用例。每个测试用例描述如下:

  • 一行包含两个整数:$N$,拥有马匹的城市数量,以及 $Q$,我们感兴趣的停靠点对数。城市编号从 $1$ 到 $N$。
  • $N$ 行,每行包含两个整数 $E_i$(第 $i$ 个城市马匹的最大总行驶距离,单位为公里)和 $S_i$(该马匹奔跑的恒定速度,单位为公里/小时)。
  • $N$ 行,每行包含 $N$ 个整数。第 $i$ 行的第 $j$ 个整数 $D_{ij}$ 表示从第 $i$ 个城市到第 $j$ 个城市的直接路线长度(单位为公里);如果不存在直接路线,则为 $-1$。
  • $Q$ 行,每行包含两个整数 $U_k$ 和 $V_k$,分别表示我们想要调查的第 $k$ 对城市的起点和终点。

输出格式

对于每个测试用例,输出一行,包含 Case #x: y1 y2 ... yQ,其中 $x$ 是测试用例编号(从 $1$ 开始),$y_k$ 是从城市 $U_k$ 到城市 $V_k$ 投递信件所需的最短时间(单位为小时)。

如果 $y_k$ 与正确答案的绝对误差或相对误差在 $10^{-6}$ 以内,则被视为正确。

数据范围

时间限制:每个测试集 20 秒。 内存限制:1 GB。 $1 \le T \le 100$。 $2 \le N \le 100$。 $1 \le E_i \le 10^9$,对于所有 $i$。 $1 \le S_i \le 1000$,对于所有 $i$。 $-1 \le D_{ij} \le 10^9$,对于所有 $i, j$。 $D_{ii} = -1$,对于所有 $i$。(不存在从城市到其自身的直接路线。) $D_{ij} \neq 0$,对于所有 $i, j$。 $U_k \neq V_k$,对于所有 $k$。 保证对于所有 $k$,从 $U_k$ 到 $V_k$ 的投递都可以通过给定的马匹完成。 $U_l \neq U_m$ 和/或 $V_l \neq V_m$,对于所有不同的 $l, m$。(在一个测试用例中,不会重复调查相同的有序城市对。)

样例

样例输入 1

3
3 1
2 3
2 4
4 4
-1 1 -1
-1 -1 1
-1 -1 -1
1 3
4 1
13 10
1 1000
10 8
5 5
-1 1 -1 -1
-1 -1 1 -1
-1 -1 -1 10
-1 -1 -1 -1
1 4
4 3
30 60
10 1000
12 5
20 1
-1 10 -1 31
10 -1 10 -1
-1 -1 -1 10
15 6 -1 -1
2 4
3 1
3 2

样例输出 1

Case #1: 0.583333333
Case #2: 1.2
Case #3: 0.51 8.01 8.0

说明

注意,最后一个样例用例不会出现在小数据集中。

在 Case #1 中有两种选择:全程使用城市 1 的马,或者在城市 2 换马。两匹马的耐力都足够,所以两种选择都可行。由于城市 2 的马更快,换马更好,总时间为 $1/3 + 1/4$。

在 Case #2 中,有两个中间城市可以换马。然而,如果你在城市 2 换马,你的新马虽然速度极快,但耐力不足,所以你被迫在城市 3 再次换马。如果你保留原来的马,你将可以选择在城市 3 换马(或不换)。因此,三种选择及其总时间为: 1. 在城市 2 和 3 都换马 ($1/10 + 1/1000 + 10/8 = 1.351$)。 2. 只在城市 3 换马 ($2/10 + 10/8 = 1.45$)。 3. 从不换马 ($12/10 = 1.2$)。

在 Case #3 中,每次投递都有很多选择。第一次投递(城市 2 到城市 4)的最优方案是先以 $10/1000$ 的时间到达城市 1,换马,然后依次前往城市 2、3 和 4,使用来自城市 1 的马,这需要 $(10 + 10 + 10) / 60$ 的时间。

对于第二次投递(城市 3 到城市 2),你别无选择,只能先去城市 4,这需要 $10/5$ 的时间。你相对较快的马没有足够的耐力去其他任何地方,所以你需要换成城市 4 的马。你可以用它以 15 的时间直接到达城市 1,但这比骑它以 6 的时间到达城市 2,然后使用城市 2 速度极快的马以额外 $10/1000$ 的时间到达城市 1 要慢。

在 Case #3 的第三次投递(城市 3 到城市 1)中,最优方案是使用前一次投递的前两个步骤,总时间为 $10/5 + 6 = 8$。

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.