SP3941 MKTHPATH - Kth Shortest Path
题目描述
Isaac 对于每天使用相同的最短路线去上班感到十分厌烦。尽管这样做可以节省时间,他却不得不反复欣赏相同的风景,这让他难以忍受。
某天,他决定对这种情况进行一些改变。他计划每天至少对路线做一些细微的调整。具体来说,第一天他将走最短的路线;第二天,他会选择第二短的路线,也就是不使用第一天选择的那条。更一般地,在第 $k$ 天,他会选择第 $k$ 短的路线。当然,路线中不允许重复经过同一地点。
你需要帮助 Isaac,为他编写一个程序来找出他在第 $k$ 天应走的路线。这个问题可以用图论来建模。你的程序需要在给定的有向图中找出从起点到终点的第 $k$ 短路径。
输入格式
输入包括多个数据集,每个数据集的格式如下:
```
n m k a b
x1 y1 d1
x2 y2 d2
…
xm ym dm
```
每行中的多个输入项是用空格分隔的非负整数。
- $n$ 表示图中的节点数,$2 \le n \le 100$。
- $m$ 表示图中的边数,$1 \le m \le 1000$。
- $k$ 表示要找到的路径序号,$1 \le k \le 10000$。
- $a$ 和 $b$ 分别表示起点和终点,$1 \le a, b \le n$ 且 $a \neq b$。
- 每条边由三个整数 $x_i, y_i, d_i$ 组成,分别表示这条边的起点、终点和长度,$1 \le x_i, y_i \le n$ 且 $1 \le d_i \le 10000$。
输出格式
对于每个输入数据集,输出一行。输出行不应包含多余的字符如空格。
- 如果从 $a$ 到 $b$ 的不同路径少于 $k$ 条,输出 "None"。注意 "None" 的首字母大写。
- 如果从 $a$ 到 $b$ 的不同路径不少于 $k$ 条,输出第 $k$ 短路径上的节点编号,并按访问顺序用连字符(-)分隔。注意,第一个节点必须是 $a$,最后一个节点必须是 $b$。
在这个问题中,“更短”有特殊的含义:路径 $P$ 比路径 $Q$ 更短,当且仅当以下任一条件成立:
1. 路径 $P$ 的总长度小于路径 $Q$。
2. 两条路径长度相等,但路径 $P$ 的节点序列在字典序中小于路径 $Q$。具体来说,设 $P$ 的节点序列为 $p_1, p_2, \ldots, p_s$,$Q$ 的节点序列为 $q_1, q_2, \ldots, q_t$。两条路径都必须从 $a$ 起始,以 $b$ 结束。在字典序中,若存在某个 $r (1 \le r < s)$ 使得 $p_1 = q_1, p_2 = q_2, \ldots, p_{r-1} = q_{r-1}$ 且 $p_r < q_r$,则路径 $P$ 比路径 $Q$ 更短。
**本翻译由 AI 自动生成**