问题 5519 --打字机

5519: 打字机

时间限制: 7 Sec  内存限制: 512 MB
提交: 4  解决: 4
[提交][状态][命题人:]

题目描述

“一沓稿纸。她的懦弱与坚强全都写在里面,毫无隐瞒。”

现在有一个属性更强的打字机,其内置一个仅由小写字母构成的字符串集合 S 。对于字符串集合 S 中的每个字符串 s ,你需要计算打印该字符串所需的最少时间。

每次打印一个字符串,都是从空字符串开始。你可以多次选择以下操作,直至打印出完整的目标字符串:
1. 设当前字符串是 t ,你可以在 t 的末尾添加一个新的小写字母 c ,使得字符串变为 t+c ,耗时 1 秒 。
2. 设当前字符串是 t ,你可以使用自动补全功能。对于所有集合 S 内的且包含前缀 t 的字符串 s ,将它们按字典序从小到大排序,利用自动补全可以将 t 变为第 i 个排序后的字符串,耗时 i 秒。

输入

第一行输入一个整数 n (1≤n≤10^6) 。将构造 n+1 个字符串,第 0 个字符串 s[0] 是空字符串。
接下来 n 行,第 i 行包含一个整数 p[i] (0≤p[i]<i) 和一个小写字母 c[i] ,表示第 i 个字符串 s[i] 是第 p[i] 个字符串 s[p[i]] 末尾添加字母 c[i] 得到。
保证所有字符串不同。
接下来一行包含一个整数 k (1≤k≤n) ,表示字符串集合 S 的大小。
接下来一行包含 k 个互不相同整数 a[1],a[2],...,a[k] (1≤a[i]≤n) ,表示字符串集合包含 s[a[1]],s[a[2]],...,s[a[k]] 。

输出

输出一行共 k 个整数,第 i 个整数表示打印第 s[a[i]] 个字符串的最少耗时。
样例输入
Copy
样例1:
10
0 i
1 q
2 g
0 k
1 e
5 r
4 m
5 h
3 p
3 e
5
8 9 1 10 6

样例2:
8
0 a
1 b
2 a
2 b
4 a
4 b
5 c
6 d
5
2 3 4 7 8
样例输出
Copy
样例1:
2 4 1 3 3

样例2:
1 2 2 4 4

提示

来源

[提交][状态]