题目背景
走路的时候,日记非常喜欢用各种奇怪的方式衡量自己这次走路的效率。
题目描述
日记所在的城市有 n 个路口和 m 条连接两个路口的单向道路,且任何两个路口互相(直接或间接)可达。每条道路从第 ui 个路口通向第 vi 个路口,且名为 wi。不知道为什么,日记离开一个路口就不能再回去了(也就是说图无环)。
从一个路口到另一个路口可能有很多种路径。一条路径的权值为这条路径经过的每条道路的名字依次相连,例如依次经过道路“awa”“qwq”“ovo”的路径的权值 p 为“awaqwqovo”。
- 有的时候,日记觉得更短的路更优秀,因此她最喜欢走权值 p 的长度最短的路径。如果有多条路径具有相同的权值长度,她会优先走权值的字典序最小的那条。
- 有的时候,日记又会觉得权值更小的路更优秀,因此她会直接优先走权值字典序最小的路径。
对于两个字符串 s,t,我们称 s 的字典序比 t 小,当且仅当 ∃i∈[1,max(∣s∣,∣t∣)] 满足 s1=t1,s2=t2,…,si−1=ti−1,si<ti。对于一个 i>∣s∣,定义 si=0,其中字符 0 小于任何其它字符。
日记只会从自己的家所在路口(路口 1)出发,并去向第 n 个路口。日记想知道,在上述两种情况下,她会优先走的那条路径的权值是什么。你能帮帮她吗?
形式化题意
日记所在城市的路口和道路可以分别抽象为点集 V=[1,n]∩ N 和边集 E={(u1,v1),(u2,v2),…,(um,vm)},它们组成有向无环图 G(V,E)。每条边 (ui,vi)∈E 均有一个字符串权 wi。
定义一条路径为有序 k(k≥1) 元组 (a1,a2,…,ak),满足 ∀1≤i<k,有 vai=uai+1。定义一条路径 (a1,a2,…,ak) 的权值为 wa1,wa2,…,wak 顺次连接的结果。
请求出在以下两种情况下点 1 到点 n 的最小权路径。
- 对于两个字符串 s,t,s<t 当且仅当 ∣s∣<∣t∣∨(∣s∣=∣t∣∧(∃i∈[1,max(∣s∣,∣t∣)] s.t. s1=t1,s2=t2,…,si−1=ti−1,si<ti))。
- 对于两个字符串 s,t,s<t 当且仅当 ∃i∈[1,max(∣s∣,∣t∣)] s.t. s1=t1,s2=t2,…,si−1=ti−1,si<ti。
额外定义,对于字符串 s 和整数 i>∣s∣,si=0,其中 0 小于任何其它字符。
输入格式
第 1 行,输入 3 个正整数 n,m。
接下来 m 行,每行输入 2 个正整数 ui,vi 和 1 个只包含小写字母的字符串 wi。
输出格式
输出 1 行 2 个字符串,分别代表在情况 1 和 2 时日记会优先走的路径的权值。数据保证,一定存在一条路径使得路口 1 能够到达路口 n。
数据范围
本题设置 25 个测试点,每个测试点 4 分。同时,每个测试点满足一些限制,见下:
测试点编号 |
n \leq |
m \leq |
特殊性质 |
1 |
10 |
50 |
r |
2 |
3 |
100 |
1000 |
4 |
5 |
2000 |
4000 |
g |
6 |
7 |
8 |
104 |
r |
9 |
|
10 |
104 |
11 |
105 |
2×105 |
g |
12 |
13 |
14 |
5×105 |
s(1) |
15 |
16 |
17 |
18 |
s(2) |
19 |
20 |
21 |
22 |
r |
23 |
24 |
5×105 |
|
25 |
5×105 |
特别地,特殊性质 g
代表:图为网格图;s(x)
代表:每条边的名(边权) wi 均满足 ∣wi∣=x;r
代表:数据随机生成。
网格图生成:设网格图尺寸为 x×y(xy=n),则网格图上每个节点 (i,j) 向 (i+1,j) 及 (i,j+1) 连边(若其存在)。之后,将每个坐标映射为一个路口,保证 (1,1) 处映射为路口 1,(x,y) 处映射为路口 n。额外保证 ∣wi∣=1。
随机生成:先随机生成一个以 1 为根的叶向树,即 i 的父亲在 [1,i−1] 中等概率随机选取,并从每个节点的父亲向其连边;再随机生成 m−n+1 条边:先随机取一个深度不最大的节点 u,再随机取一个深度严格大于它的点 v,并连边 (u,v)。额外保证 ∣wi∣≤4,并先等概率选取某个长度,再等概率选取该长度的一个合法字符串。
对全部数据,有 1≤n≤105,n−1≤m≤5×105,∣wi∣≤105,∑∣wi∣≤2×106。
输入样例 1
4 6
1 2 aa
1 3 b
1 4 c
2 3 d
2 4 dd
3 4 c
输出样例 1
c aadc