题目背景
我一直认为这世界没有永恒,如果非要说永恒,宇宙间唯一的永恒就是——所有的一切都会随着时光消失。——梧桐《那片星空,那片海》
题目描述
有一棵 n 个点的永恒的树,树中每个点 x(1≤x≤n) 上都有一个永恒的字符串 S(x)。
但这世界没有永恒,所有的一切都会随着时光消失。我们只能给每个所谓永恒的东西定义一个永恒值 f。这个值本身没有意义,只是一个象征罢了。
- 一个字符串 S 的永恒值 f(S) 定义为它的长度 Len(S),即:
f(S)=Len(S)
- 树上的一条无向路径 K=[u,v](u<v) 指的是 u,v 之间的简单路径(包括 u,v),其永恒值 f(K) 定义为路径上所有不同的无序点对 (x,y)(x∈K,y∈K,x<y) 上的字符串 S(x),S(y) 的最长公共前缀 LCP(S(x),S(y)) 的永恒值 f(LCP(S(x),S(y))) 之和,即:
f(K)=x∈K,y∈K,x<y∑f(LCP(S(x),S(y)))
- 一棵树 T 的永恒值 f(T) 定义为树上所有的无向路径 [u,v](u∈T,v∈T,u<v) 的永恒值之和,即:
f(T)=u∈T,v∈T,u<v∑f([u,v])
特别的是,树中每个点上的字符串都来自一棵永恒的以点 1 为根的 Trie 树,即每个树中的点都对应着一个 Trie 树中的点,点上的字符串就是 Trie 树中从根节点到其对应的点形成的字符串。
你需要求出这棵树的永恒值,答案对 998244353 取模。
输入格式
第一行包含两个正整数 n,m,分别表示树的节点数和 Trie 树的节点数。
第二行包含 n 个非负整数,第 i 个数为 ai,表示点 i 在树上的父亲节点为 ai,对于树的根节点 root,保证 aroot=0。
第三行包含 m 个非负整数,第 i 个数为 bi,表示点 i 在 Trie 树上的父亲节点为 bi,保证 bi<i,b1=0。
第四行为一个由 m 个字符构成的字符串,第 i 个字符 ci 表示 Trie 树上点 i 与它的父亲节点 bi 之间的边所代表的字符,保证 c1=0,ci(2≤i≤m)∈[a,z]。
第五行包含 n 个正整数 di,表示树上的点 i 对应着 Trie 树上的点 di,保证 2≤di≤m。
输出格式
一行一个整数,表示答案对 998244353 取模后的值。
提示
【样例 1 说明】
所有的 S(x) 为:
S(1)="mayqueen"
S(2)="mayking"
S(3)="market"
所有的 f(LCP(S(x),S(y))) 为:
f(LCP(S(1),S(2)))=f(LCP("mayqueen","mayking"))=f("may")=Len("may")=3
f(LCP(S(1),S(3)))=f(LCP("mayqueen","market"))=f("ma")=Len("ma")=2
f(LCP(S(2),S(3)))=f(LCP("mayking","market"))=f("ma")=Len("ma")=2
所有的 f([u,v]) 为:
f([1,2])=f(LCP(S(1),S(2)))=3
f([1,3])=f(LCP(S(1),S(2)))+f(LCP(S(1),S(3)))+f(LCP(S(2),S(3)))=3+2+2=7
f([2,3])=f(LCP(S(2),S(3)))=2
所以:
f(T)=f([1,2])+f([2,3])+f([1,3])=3+7+2=12
【数据规模与约定】
本题采用捆绑测试。
Subtask 1(3 points):n,m≤10,时限 1s。
Subtask 2(5 points):n,m≤100,时限 1s。
Subtask 3(9 points):n,m≤1000,时限 1s。
Subtask 4(7 points):n,m≤5000,时限 2s。
Subtask 5(9 points):n,m≤20000,时限 3s。
Subtask 6(11 points):n,m≤105,时限 4s。
Subtask 7(19 points):m=2,时限 3s。
Subtask 8(37 points):无特殊限制,时限 10s。
对于 100% 的数据,2≤n,m≤3×105。