QOJ.ac

QOJ

Time Limit: 45 s Memory Limit: 64 MB Total points: 100

#5506. 超回路

Statistics

2077 年,人工智能刚刚解决了超图着色的最后一个难题,理论计算机科学系那些刚失业的研究人员被一位古怪的亿万富翁 Melon Usk 聘请,为 Hyperloop 复合体开发软件——这是一个超高速城际连接系统。

由于水位上升,地球上仅存的陆地是一个单一的岛屿,其海岸线上坐落着 $n$ 个幸存城市,为了方便起见,我们按它们沿海岸线出现的顺序将其命名为 $1, 2, \dots, n$。Melon 拥有环绕岛屿运行的渡轮,即连接城市 $i$ 和 $i+1$(对于 $1 \le i < n$)以及城市 $n$ 和 $1$。他还拥有连接某些非相邻城市对的 Hyperloop 连接。

剩下的唯一工作就是设计计算城市间最短路径的软件;在测试版本中,它仅支持从 $1$ 到 $n$ 的旅行。

这个任务看起来可能很简单:毕竟,软件需要同时考虑这两种类型的连接,而且在城市 $1$ 和 $n$ 之间已经存在直接的渡轮连接,但这不一定是最快的路线!更糟糕的是,可能存在多条最短路径。在这种情况下,系统应该优先选择包含尽可能长的城市间连接的路径(单段旅程持续时间越长,乘客在旅途中购买 Melon 高价咖啡的可能性就越大)。形式上,为了比较总长度相同的路径,应列出路径中各连接的长度(包括重复项),将每个序列按非递增顺序排序,并选择字典序最大的一个。

给定环绕岛屿的渡轮和 Hyperloop 连接的描述,找出从城市 $1$ 到城市 $n$ 的最优路径。在比较路径时,两种连接同等对待。所有连接均为双向。

请注意,此任务的内存限制较低,为 64MB。

输入格式

输入的第一行包含测试用例的数量 $z$ ($1 \le z \le 600$)。接下来是各测试用例的描述。

每个测试用例的第一行包含两个整数 $n, m$ ($3 \le n \le 100\,000, n \le m \le 300\,000$),分别表示城市数量和连接数量。

接下来的 $m$ 行,每行包含三个整数 $u_i, v_i, d_i$ ($1 \le u_i \neq v_i \le n, 1 \le d_i \le 50\,000$),依次表示:由给定双向连接相连的城市,以及通行所需的时间。

在输入给出的连接中,会出现 $(1, 2), (2, 3), \dots, (n, 1)$,对应于渡轮连接。

任意一对城市之间最多只有一条连接。

所有测试用例中的城市总数不超过 $400\,000$。所有测试用例中的连接总数不超过 $800\,000$。

输出格式

对于每个测试用例,第一行输出一个整数 $k$,表示最优路径中的城市数量。第二行输出 $k$ 个不同的整数,表示路径上依次经过的城市编号。

所选路径应从城市 $1$ 开始,在城市 $n$ 结束,并且是问题描述中定义的最优路径。

如果存在多条最优路径,输出其中任意一条即可。

样例

样例输入 1

2
4 6
1 2 1
1 3 2
2 3 1
2 4 2
3 4 1
1 4 4
6 11
1 2 9
2 3 12
3 4 3
4 5 5
5 6 10
6 1 22
2 4 9
3 6 1
4 6 5
2 5 2
3 5 8

样例输出 1

3
1 2 4
5
1 2 5 3 6

说明

在第一个样例测试中,从城市 $1$ 到城市 $4$ 的最小距离为 $3$,由三条路径实现:$1 \to 2 \to 4$,$1 \to 3 \to 4$ 和 $1 \to 2 \to 3 \to 4$。根据问题描述的定义,前两条路径优于第三条,因为字典序 $(2, 1) > (1, 1, 1)$。前两条路径中的任意一条都是正确答案。直接路径 $1 \to 4$ 不被考虑,因为其总长度为 $4$。

在第二个样例测试中,最小距离的路径为 $1 \to 2 \to 5 \to 3 \to 6$ 和 $1 \to 2 \to 5 \to 4 \to 3 \to 6$。第一条路径是最优的,因为比较它们排序后的长度得到 $(9, 8, 2, 1) > (9, 5, 3, 2, 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.