luogu#P11595. [NOISG 2018 Finals] Journey

[NOISG 2018 Finals] Journey

题目背景

译自 NOISG 2018 Finals B. Journey

题目描述

Kuno 要从 A 市到 B 市旅行,但在路途中他可能会停下来休息。

允许他停留的共有 NN 个城市,编号为 00N1N-1,其中 00 号城市表示 A 市,N1N-1 号城市表示 B 市,编号越大的城市距离 B 市越近。

为了让旅行保持一定的效率,中途停留需要满足以下限制:

  • ii 次停留的城市必须比第 i1i-1 次离 B 市严格更近。特别地,我们认为第 00 次停留的城市是 A 市。
  • 从 A 市出发,直到从 B 市结束停留离开,整个过程不能超过 MM 天。换句话说,我们不允许你在 A 市停留,但允许你在 B 市停留。

Kuno 在城市之间的移动和停留基于城市之间的航线和城市中的酒店系统。每个城市 ii 都存在 HH 条用 (j,k)(j,k) 表示的航线,表示你可以通过这条航线从城市 ii 前往城市 jj,但是一旦使用这条航线,就必须在城市 jj 中停留不少于 kk 天。特别地,每个城市都有一条直接前往 B 市的航线

注意可能存在完全相同或起点终点相同的航线,此时你需要把它们视为不同航线。你应当忽略远离 B 市的航线。

在飞机中度过的时间忽略不计。

到达一个城市即算作在该城市停留,即使停留了 00 天。

你的任务是,对每一个 d[1,m]d\in[1,m],帮助 Kuno 计数他从 A 市出发到从 B 市结束停留返回花费 dd 天的方案数。特别地,若方案数超过 5×1085\times 10^8,你只需输出 5×108+15\times 10^8+1

两个旅行方案不同当且仅当以下三条任意一条成立:

  1. 一个旅行方案中需要在城市 ii 停留,而另一个不用。
  2. 存在一个城市 ii,使得两个旅行方案离开该城市的时间不同。特别地,也包括从 B 市离开的时间不同
  3. 两个行程都从城市 ii 到城市 jj,但使用的航线不同。

例如,对于两个均为 A 市到 C 市,再从 C 市到 D 市,最后从 D 市到 B 市的旅行方案,如果一个是在第二天离开 C 市,另一个是在第三天离开 C 市,那么它们就是不同的方案。此外,如果输入中存在两条同样从 D 市前往 B 市的航线,即便出发时间和到达时间相同,也是不同的方案。

如你仍无法完全理解题意,请阅读样例解释

输入格式

第一行包含三个整数 N,M,HN,M,H,表示城市数量,旅行天数上限,和每个城市的航线数量。

接下来的输入包含 N1N-1 行,第 ii 行包含 2H2H 个用空格分割的整数,每两个为一组 (j,k)(j,k),描述从城市 i1i-1 出发的 HH 条航线。

输出格式

输出 mm 个用空格隔开的整数,依次表示从 A 市出发直至从 B 市结束停留离开共花费恰好 1,2,3,,m1,2,3,\cdots ,m 天的旅行方案数。注意如果方案数超过 5×1085\times 10^8,则应输出 5×108+15\times 10^8+1

4 4 3
1 2 2 2 3 0
2 2 2 3 3 0
3 1 3 3 3 0
1 1 3 6
4 8 3
1 0 2 1 3 0
3 1 3 2 3 0
3 1 3 1 3 0
2 5 11 17 23 29 35 41
4 11 3
1 0 2 0 3 0
0 0 2 0 3 0
0 0 0 0 3 0
4 8 13 19 26 34 43 53 64 76 89
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
960800 6702725 26746084 80092734 199948848 439388874 500000001 500000001

提示

样例 #1 解释

样例 #1 输入描述了一个具有 44 座城市,每个城市有 33 条不同的航线出发的情况:

出发城市 航线 11 终点 Min.\text{Min.} 航线 22 终点 Min.\text{Min.} 航线 33 终点 Min.\text{Min.}
A 市 城市 11 22 城市 22 22 B 市 00
城市 11 城市 22 33
城市 22 B 市 11 B 市

为了方便表格描述,我们用 Min.\text{Min.} 表示了每条航线对目的地最少停留天数的要求。

所有 11 天的旅行方案如下;

旅行方案 方案
11 在第 11 天从 A 市通过航线 33 抵达 B 市,在 B 市停留 00 天。

所有 22 天的旅行方案如下:

旅行方案 方案
11 在第 11 天从 A 市通过航线 33 抵达 B 市,在 B 市停留 11 天。

所有 33 天的旅行方案如下:

旅行方案 方案
11 在第 11 天从 A 市通过航线 11 抵达城市 11,在城市 11 停留 22 天;在第 33 天从城市 11 通过航线 33 抵达 B 市,在 B 市停留 00 天。
22 在第 11 天从 A 市通过航线 22 抵达城市 22,在城市 22 停留 22 天;在第 33 天从城市 22 通过航线 33 抵达 B 市,在 B 市停留 00 天。
33 在第 11 天从 A 市通过航线 33 抵达 B 市,在 B 市停留 22 天。

所有 44 天的旅行方案如下:

旅行方案 方案
11 在第 11 天从 A 市通过航线 11 抵达城市 11,在城市 11 停留 22 天;在第 33 天从城市 11 通过航线 33 抵达 B 市,在 B 市停留 11 天。
22 在第 11 天从 A 市通过航线 11 抵达城市 11,在城市 11 停留 33 天;在第 44 天从城市 11 通过航线 33 抵达 B 市,在 B 市停留 00 天。
33 在第 11 天从 A 市通过航线 22 抵达城市 22,在城市 22 停留 22 天;在第 33 天从城市 22 通过航线 33 抵达 B 市,在 B 市停留 11 天。
44 在第 11 天从 A 市通过航线 22 抵达城市 22,在城市 22 停留 33 天;在第 44 天从城市 22 通过航线 33 抵达 B 市,在 B 市停留 00 天。
55 在第 11 天从 A 市通过航线 22 抵达城市 22,在城市 22 停留 22 天;在第 33 天从城市 22 通过航线 11 抵达 B 市,在 B 市停留 11 天。
66 在第 11 天从 A 市通过航线 33 抵达 B 市,在 B 市停留 33 天。

样例 #2 解释

这组样例中除 A 市外所有城市的出发航线均直接到达 B 市。它满足子任务 1,3,41,3,4

样例 #3 解释

这组样例中所有的航线均不限制目的地最少停留天数。它满足子任务 2,3,42,3,4

样例 #4 解释

注意若方案数超过 5×1085\times 10^8,你只需输出 5×108+15\times 10^8+1。它满足子任务 2,3,42,3,4

子任务

对于 100%100\% 的数据,N104,M400,H100N\le 10^4,M\le 400,H\le 100,其余输入均在此范围下合法。

子任务 得分 数据范围及特殊性质
11 2020 除 A 市外所有城市的出发航线均直接到达 B 市,N,M,H10N,M,H\le 10
22 2323 所有的航线均不限制目的地最少停留天数,N,M,H20N,M,H\le 20
33 2626 N,M,H100N,M,H\le 100
44 3131 无特殊限制