#3171. 日记和最短路
日记和最短路
题目背景
走路的时候,日记非常喜欢用各种奇怪的方式衡量自己这次走路的效率。
题目描述
日记所在的城市有 个路口和 条连接两个路口的单向道路,且任何两个路口互相(直接或间接)可达。每条道路从第 个路口通向第 个路口,且名为 。不知道为什么,日记离开一个路口就不能再回去了(也就是说图无环)。
从一个路口到另一个路口可能有很多种路径。一条路径的权值为这条路径经过的每条道路的名字依次相连,例如依次经过道路“awa”“qwq”“ovo”的路径的权值 为“awaqwqovo”。
- 有的时候,日记觉得更短的路更优秀,因此她最喜欢走权值 的长度最短的路径。如果有多条路径具有相同的权值长度,她会优先走权值的字典序最小的那条。
- 有的时候,日记又会觉得权值更小的路更优秀,因此她会直接优先走权值字典序最小的路径。
对于两个字符串 ,我们称 的字典序比 小,当且仅当 满足 $s_1 = t_1, s_2 = t_2, \dots, s_{i-1} = t_{i-1}, s_i < t_i$。对于一个 ,定义 ,其中字符 小于任何其它字符。
日记只会从自己的家所在路口(路口 )出发,并去向第 个路口。日记想知道,在上述两种情况下,她会优先走的那条路径的权值是什么。你能帮帮她吗?
形式化题意
日记所在城市的路口和道路可以分别抽象为点集 和边集 ,它们组成有向无环图 。每条边 均有一个字符串权 。
定义一条路径为有序 元组 ,满足 ,有 。定义一条路径 的权值为 顺次连接的结果。
请求出在以下两种情况下点 到点 的最小权路径。
- 对于两个字符串 , 当且仅当 $|s| < |t| \vee (|s| = |t| \wedge (\exists i \in [1, \max(|s|, |t|)] \text{ s.t. } s_1 = t_1, s_2 = t_2, \dots, s_{i-1} = t_{i-1}, s_i < t_i))$。
- 对于两个字符串 , 当且仅当 $\exists i \in [1, \max(|s|, |t|)] \text{ s.t. } s_1 = t_1, s_2 = t_2, \dots, s_{i-1} = t_{i-1}, s_i < t_i$。
额外定义,对于字符串 和整数 ,,其中 小于任何其它字符。
输入格式
第 行,输入 个正整数 。
接下来 行,每行输入 个正整数 和 个只包含小写字母的字符串 。
输出格式
输出 行 个字符串,分别代表在情况 和 时日记会优先走的路径的权值。数据保证,一定存在一条路径使得路口 能够到达路口 。
数据范围
本题设置 25 个测试点,每个测试点 4 分。同时,每个测试点满足一些限制,见下:
测试点编号 | n \leq | m \leq | 特殊性质 |
---|---|---|---|
特别地,特殊性质 g
代表:图为网格图;s(x)
代表:每条边的名(边权) 均满足 ;r
代表:数据随机生成。
网格图生成:设网格图尺寸为 ,则网格图上每个节点 向 及 连边(若其存在)。之后,将每个坐标映射为一个路口,保证 处映射为路口 , 处映射为路口 。额外保证 。
随机生成:先随机生成一个以 为根的叶向树,即 的父亲在 中等概率随机选取,并从每个节点的父亲向其连边;再随机生成 条边:先随机取一个深度不最大的节点 ,再随机取一个深度严格大于它的点 ,并连边 。额外保证 ,并先等概率选取某个长度,再等概率选取该长度的一个合法字符串。
对全部数据,有 $1 \leq n \leq 10^5, n - 1 \leq m \leq 5 \times 10^5, |w_i| \leq 10^5, \sum |w_i| \leq 2 \times 10^6$。
输入样例 1
4 6
1 2 aa
1 3 b
1 4 c
2 3 d
2 4 dd
3 4 c
输出样例 1
c aadc
相关
在下列比赛中: