题目描述
给定一棵有 l 个节点的 trie 树。
对于树上的某个点 i,定义 ui 为从根节点到 i 的路径上的字符从浅到深顺次连接得到的字符串,其中:
u1=∅
给出若干字符串:
s1,s2,…,sn
和一个序列:
a1,a2,…,am
令:
T=sa1+sa2+⋯+sam
其中 + 表示字符串拼接。
对于每一个 ui (1<i≤l),求 ui 在 T 中出现的次数 ansi。
输入格式
输入第一行包含四个正整数:
l, n, m, w
接下来一行包含 l−1 个正整数,分别表示:
c2,c3,…,cl
即 trie 树上每个点到父亲的边上的字符。
接下来一行包含 l−1 个正整数,分别表示:
fa2,fa3,…,fal
即 trie 树上每个点的父亲。
接下来 n 行,每行首先有一个正整数表示 ∣si∣,然后 ∣si∣ 个正整数给出 si。
接下来一行包含 m 个正整数,分别表示:
a1,a2,…,am
输出格式
输出一行 l−1 个非负整数,分别表示:
ans2,ans3,…,ansl
样例输入 #1
7 3 6 2
1 2 2 1 1 1
1 1 2 2 3 4
3 1 1 1
4 1 2 1 2
3 2 2 1
1 3 2 3 1 1
样例输出 #1
13 6 3 9 3 1
数据范围
记:
S=i=1∑n∣si∣
对于所有数据,保证:
1≤l≤105
1≤n≤100
1≤m≤106
1≤S≤3×106
1≤fai≤l
1≤w≤4×106
所有输入的字符均属于 [1,w]。
保证输入的 fa 构成一棵以 1 为根的树。
子任务
| 子任务编号 |
l≤ |
m≤ |
S≤ |
w≤ |
trie 树形态 |
分值 |
| 1 |
2000 |
4×106 |
- |
15 |
| 2 |
105 |
106 |
3×106 |
fai=i−1 (1<i≤n) |
20 |
| 3 |
2000 |
26 |
- |
25 |
| 4 |
105 |
5×105 |
20 |
| 5 |
3×106 |
4×106 |