QOJ.ac

QOJ

时间限制: 1 s 内存限制: 256 MB 总分: 100

#13296. 旅程

统计

Kuno Kunibertson 正在从安曼(Amman)搬家到巴西利亚(Brasília)。他的新雇主支付旅费并允许他进行任意次数的经停;仅有的两个条件是:(1)行程中第 $i$ 个经停城市距离巴西利亚的距离应比第 $(i-1)$ 个经停城市更近;(2)行程总耗时不得超过 $m$ 个夜晚。此外,由于巴西利亚是一个交通枢纽,每个城市都有直飞巴西利亚的航班。Kuno Kunibertson 必须向旅行评估机构提供以下信息:

  1. 三个整数 $n, m, h$,其中 $n$ 是行程中可能访问的城市数量,$m$ 是行程总耗时的上限,$h$ 是每个经停城市后续航班的数量(为了方便记号,城市编号为 $0, 1, \dots, n-1$,其中 $0$ 是安曼,$n-1$ 是巴西利亚)。
  2. 对于每个经停城市,提供恰好 $h$ 个可能的后续航班列表,每个航班由下一个城市以及在下一个城市的最少住宿晚数指定。只有那些前往距离巴西利亚更近的城市的航班才是相关的,其他航班应被程序忽略。

旅行评估机构随后将利用某种人工智能程序为他规划合适的行程,该程序根据旅游景点的数据库优化行程。然而,为了不使其计算机过载,旅行评估机构有以下要求:

(*)使用 $k$ 个夜晚($k < m$)的行程数量不应超过 $500000000$(即 $5 \times 10^8$)。

注意,在计数时,如果满足以下任一条件,则认为两个行程是不同的:

  • 一个行程包含在城市 $i$ 的经停,而另一个不包含;
  • 从城市 $i$ 出发的日期在两个行程中不同;
  • 两个行程都从城市 $i$ 前往城市 $j$,但使用了不同的航班(如果 Kuno Kunibertson 在数据中列出了从城市 $i$ 到城市 $j$ 的两个或多个航班,则会出现这种情况)。

例如,如果行程是安曼 - 开罗 - 达喀尔 - 巴西利亚,那么在第 2 天从开罗出发的行程与在第 3 天从开罗出发的行程不同。此外,如果有两个从达喀尔到巴西利亚的航班(即使它们在同一天出发和到达),由于它们使用了不同的航班,这些行程也是不同的。

由于违反条件(*)会受到处罚,Kuno Kunibertson 请他的朋友 Herbert Hercules 为他编写一个计算机程序,计算使用最多 $k$ 天的行程数量。

输入格式

程序必须从标准输入读取数据。

输入的第一行包含三个整数 $n, m$ 和 $h$,其中 $n$ 是城市数量,$m$ 是所用夜晚数的严格上限,$h$ 是每个城市的后续航班数量。我们假设城市 $0$ 是安曼,城市 $n-1$ 是巴西利亚。我们还假设如果 $i > j$,则城市 $i$ 比城市 $j$ 更靠近巴西利亚。

然后,输入包含 $n-1$ 行,其中第 $i$ 行($i = 0, 1, \dots, n-2$)包含 $h$ 对整数 $(j, k)$,这意味着 Kuno Kunibertson 可以从城市 $i$ 飞往城市 $j$ 并至少停留 $k$ 个夜晚。如果前往同一个城市有多个航班,它们被视为不同的航班。所有 $2h$ 个整数在一行中以空格分隔。

输出格式

程序必须仅输出到标准输出。

输出是一个包含 $m$ 个整数的列表,这些整数在 $0$ 到 $500000001$ 之间,分别是从安曼到巴西利亚耗时 $0, 1, \dots, m-1$ 个夜晚的行程数量。如果行程数量为 $500000001$ 或更多,则输出应为 $500000001$。

子任务

共有四个子任务;每个子任务将在多个实例上进行测试,每个实例的最大执行时间为 1.0 秒。子任务及其分值如下:

子任务 分值 条件
1 20 最多一次经停,$n, m, h \le 10$
2 23 无最少停留要求,$n, m, h \le 20$
3 26 $n, m, h \le 100$
4 31 $n \le 10000, m \le 400, h \le 100$

“最多一次经停”意味着所有从经停点出发的航班都直接飞往巴西利亚。“无最少停留要求”意味着每次经停的停留时间可以是任意数字(包括 $0$),并且 Kuno Kunibert 在抵达巴西利亚后即可报告工作。

样例

样例输入 1

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

样例输出 1

2 5 11 17 23 29 35 41

样例输入 2

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

样例输出 2

4 8 13 19 26 34 43 53 64 76 89

样例输入 3

8 8 8
1 0 1 0 1 0 1 0 1 0 1 0 1 0 7 0
2 0 2 0 2 0 2 0 2 0 2 0 2 0 7 0
3 0 3 0 3 0 3 0 3 0 3 0 3 0 7 0
4 0 4 0 4 0 4 0 4 0 4 0 4 0 7 0
5 0 5 0 5 0 5 0 5 0 5 0 5 0 7 0
6 0 6 0 6 0 6 0 6 0 6 0 6 0 7 0
7 0 7 0 7 0 7 0 7 0 7 0 7 0 7 0

样例输出 3

960800 6702725 26746084 80092734 199948848 439388874 500000001 500000001

说明

样例 3 的输出中插入了人工换行符以避免行过长。这些换行符仅用于显示目的,输出中不需要。

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.