#3508. [GESP七级模拟]旅行
[GESP七级模拟]旅行
题目描述
小明计划从城市 出发,前往城市 旅行。沿途共有 座城市,编号为 。城市之间由 条单向道路相连,任意两座城市之间至多有一条道路,且这些道路不会构成环路——也就是说,无论怎么走,都不可能回到已经访问过的城市。
每条道路通过需要花费一定时间。小明从城市 出发,必须在总时间不超过 的情况下到达目的地城市 。他希望在这段旅途中能够访问尽可能多的城市(起点和终点均计入访问数量)。
请帮助小明计算:在总时间不超过 的前提下,从城市 到城市 最多可以访问多少座城市,并给出一条可行的访问路线。
题目保证:至少存在一条从城市 到城市 的路径,使得总时间不超过 。
输入格式
第一行包含三个整数 ,分别表示城市的数量、道路的数量和允许的最大总时间。
接下来 行,每行包含三个整数 ,表示一条从城市 到城市 的单向道路,通过时间为 。
输出格式
第一行输出一个整数 ,表示最多可以访问的城市数量。
第二行输出 个空格分隔的整数,依次表示访问的城市编号。如果有多种方案,输出任意一种均可。
样例 #1
4 4 10
1 2 2
1 3 3
2 4 4
3 4 8
3
1 2 4
样例解释 #1
所有可能的路线:
- ,经过 座城市,用时 ;
- ,经过 座城市,用时 (超时)。
因此最多可以访问 座城市,路线 是唯一可行方案。
样例 #2
6 6 4
1 2 1
2 3 1
1 4 1
3 5 1
4 5 1
5 6 1
5
1 2 3 5 6
样例解释 #2
该样例满足特殊性质:所有道路的通过时间均为 。此时总时间不超过 等价于经过的道路数不超过 。
路线 经过 座城市,用时 ,是最优方案。
样例 #3
点击链接 ex_travel3.in 和 ex_travel3.ans 下载大样例 3 的输入数据和输出数据。
该样例满足子任务 5 的约束(无特殊性质,,)。
数据范围
对于所有测试数据,保证:
- ,;
- ;
- ,;
- ;
- 道路构成一个有向无环图,且任意两座城市之间至多有一条道路;
- 至少存在一条从城市 到城市 的路径,其总时间不超过 。
每个测试点独立计分,共 个测试点,每个测试点 分。各测试点的特殊性质如下:
| 子任务 | 分值 | 测试点 | 附加约束 |
|---|---|---|---|
| , | |||
| 所有道路通过时间 | |||
| 每座城市(除 外)的入度 ,即到达每座城市的道路至多一条 | |||
| 存在道路 (链) | |||
| 无特殊性质 |
说明:每个子任务的测试点仅保证满足对应列出的特殊性质,不一定满足其他子任务的性质。例如子任务 3 的测试点仅有入度 的性质,不一定存在链。
时间限制 秒,空间限制 MB。
提示
- 子任务 1: 很小,可以暴力枚举所有可能的路径。
- 子任务 2:时间约束退化为「经过的道路数不超过 」,无需考虑不同的边权。
- 子任务 3:到达每座城市的路径唯一,无需在多种方案之间比较。
- 子任务 4:链的存在使得处理顺序天然确定。
- 子任务 5:需要完整的动态规划。建议使用
long long存储累积时间。