#CSP202305E. 闪耀巡航

    ID: 299 Type: Default 5000ms 512MiB Tried: 7 Accepted: 2 Difficulty: 5 Uploaded By: Tags>CSP动态规划子集DP图结构最短路Floyd

闪耀巡航

题目来自第 30 次 CSP 认证 T5,评测使用自造高质量复刻数据。我们承认原始题面与大样例版权均归中国计算机学会(CCF)所有,因此题面与评测服务均免费对外开放。如果您认为我们侵犯了您的权益,可联系我们。

时间限制: 5.0 秒

空间限制: 512 MB

题目描述

西西艾弗岛旅游公司最近推出了一系列环绕西西艾弗岛的闪耀游轮航线。普通的航线通常是一条环线,以便乘客在漫长的旅途之后回到出发点;而闪耀航线则多为有惊无险的单程。因此,西西艾弗岛旅游公司也允许乘客自己选择一些能够返回起点的航线组合。具体而言,西西艾弗岛旅游公司推出的航线可以用仅包含小写字母的字符串表示,其中每一种字母代表航线中途经的一个目的地。例如,航线 aqua 表示从 a 出发,途经 q 和 u,最终返回 a 的航线。西西艾弗岛旅游公司目前运营着 NN 条这样的航线,分别用字符串 s1,s2,⋯ ,sNs_1, s_2, \cdots, s_N 表示。我们定义,一条航线的长度为相应的字符串长度减 11,如航线 aqua 的长度为 33。

西西艾弗岛旅游公司为了鼓励乘客乘坐其游轮,推出了一项集章活动。乘坐其游轮途经部分目的地(可以是搭乘的航线的起点或终点)时,可以获得一枚印章。我们用字符串 tt 表示所有参与集章活动的目的地。当乘客集齐 tt 中所有字母对应的印章时,有机会抽取免费住宿豪华酒店等幸运大奖。

为了确定集章活动给公司带来的预期利润,西西艾弗岛旅游公司想知道:对于每条航线 sis_i,从 sis_i 的起点出发搭乘 sis_i 到达 sis_i 的终点,再经过多条航线(可以是 00 条)完成集章后返回 sis_i 的起点,需要乘坐的航线组合的最小总长度。

输入格式

从标准输入读入数据。

输入的第一行包含一个正整数 NN 和一个字符串 tt,保证 1≤N≤1051\leq N\leq 10^{5},1≤∣t∣≤101\leq |t|\leq 10,且 tt 仅包含不重复的小写字母。

接下来 NN 行,每行包含一个字符串 sis_i,表示第 ii 条航线。保证 2≤∣si∣≤1062\leq |s_i|\leq 10^{6},∑i=1N∣si∣≤106\sum_{i=1}^N |s_i|\leq 10^{6}。

输出格式

输出到标准输出。

输出包含 NN 行,每行输出一个正整数表示对应航线组合的最小总长度,或者输出 -1 表示不存在满足要求的航线组合。

6 au
aqua
glass
hug
shiny
sparkling
youth
3
14
14
14
26
14
7 i
nonstop
perfect
rocket
thrilling
train
trapper
tripper
16
16
11
-1
16
22
11

子任务

对于所有数据,保证 $1\le N\le 10^5,\ 1\leq |t|\leq 10,\ 2\leq |s_i|\leq 10^{6},\ \sum\limits_{i=1}^N|s_i|\leq 10^{6}$,sis_i 和 tt 仅包含小写字母,且 tt 中字母不重复。

本题采用捆绑测试,你只有通过一个子任务中的所有测试点才能得到该子任务的分数。

子任务编号 分值 N≤N\le ∣t∣≤|t|\le
1 10 1010 55
2 10001000 11
3 20 10510^5 55
4 60 1010