#HK5100. 「POI2009 R2」拜图斯的散步 The Walk of Bytie-boy

「POI2009 R2」拜图斯的散步 The Walk of Bytie-boy

题目描述

题目译自 XVI OI Olimpiada Informatyczna – II etap Przechadzka Bajtusia

Bajtuś 是拜托城最年幼的居民之一,刚刚学会读写,但已能独自上学。每天清晨,他从家出发,依次接上所有小伙伴,最后一起前往学校。

某天,Bajtuś 的老师要求他记录从家到学校的街道列表,并在下次课上朗读。然而,完整记录可能耗费大量纸张。于是,约定只记录每条街道名称的首字母。拜托城的每条街道为单向,连接两个不同交叉口。

Bajtuś 朗读时,仅在接小伙伴的地点停顿。因此,他从家到学校的路径可分为若干段,每段的街道首字母序列视为一个单词。Bajtuś 阅读尚不熟练,常从右向左读,例如 mleko 可能读成 okelm。他的父母深知这一问题,决定帮他规划一条特殊路径:每段路径的首字母序列无论正读反读都相同,且每段路径尽量短。他们向你求助。

编写程序,完成以下任务:

  • 从标准输入读取城市描述。
  • 规划从家到学校的路径,使每段路径最短,且其首字母序列为回文。
  • 在标准输出中输出每段路径的长度及其首字母序列。

输入格式

第一行包含两个整数 n,mn, m (2n400,1m60000)(2 \leq n \leq 400, 1 \leq m \leq 60000),分别表示拜托城的交叉口数和街道数。

接下来的 mm 行描述街道,第 i+1i+1 行包含三个值 xi,yi,cix_i, y_i, c_i (1xi,yin,xiyi)(1 \leq x_i, y_i \leq n, x_i \neq y_i),表示街道从交叉口 xix_iyiy_i,首字母为小写英文字母 cic_i。任意两交叉口间同方向最多有一条街道。

下一行包含一个整数 dd (2d100)(2 \leq d \leq 100),表示 Bajtuś 路径上的交叉口数。

最后一行包含 dd 个整数 sis_i (1sin)(1 \leq s_i \leq n),表示 Bajtuś 从家(交叉口 s1s_1)出发,依次经过小伙伴所在地(交叉口 s2,s3,,sd1s_2, s_3, \ldots, s_{d-1}),到达学校(交叉口 sds_d)。相邻交叉口编号不同,但列表中可能有重复交叉口。若两相邻交叉口间无符合要求的路径,Bajtuś 将抄近路,不记录任何内容。

输出格式

输出 d1d-1 行,第 ii 行包含一个整数 rir_i 和一个字符串 wiw_i,用单空格分隔。rir_i 表示从交叉口 sis_isi+1s_{i+1} 的最短路径长度,满足题目要求;wiw_i 为该路径上街道首字母序列。若无符合要求的路径,输出 1-1。若有多条符合要求的 wiw_i,输出任意一条。

6 7
1 2 a
1 3 x
1 4 b
2 6 l
3 5 y
4 5 z
6 5 a
3
1 5 3

3 ala
-1

baj.gif