#L4043. 「SNOI2024」字符树
「SNOI2024」字符树
题目描述
给你一棵 个点的有根树,根为 。每条边上有一个字符 。 表示从根到 的路径上每条边的字符依次写下来组成的字符串。保证每个节点向儿子的边上的字符互不相同。
对每个点 ,有一个价值 和一个限制 。
对每个点 ,如果点 满足 是 的后缀,那么我们认为 是 的扩展点。
Alice 手里有一个字符串 ,现在她可以删掉若干末尾的字符,使得 变成 ,并将 告诉 Bob。
Bob 获得了一个字符串 ,他需要在 之后加入若干字符,得到 。如果存在 的某个扩展点 ,满足 ,并且 ,那么 Bob 就获得了 的收益。Bob 只能进行一次这样的操作,所以他会选择符合条件的 里 最大的那个。如果没有符合条件的 ,Bob 只能获得 收益。
现在 Alice 想知道,对于删除 个字符,总计 种删除方式里 Bob 能获得权值之和是多少?
对于每个 ,你都需要回答 Alice 的询问。
形式化地说:
我们需要对每个点 求出
$
ans_u = \sum_{i=0}^{|S_u|} \max_{\substack{i \ge a_v \\ S_u = S_v[|S_v|-|S_u|+1, |S_v|] \\ S_u[1, i] = S_v[1, i]}} val_v
$
其中 表示字符串 的第 到第 个字符组成的字符串。特殊的, 表示空串。 表示字符串 的长度, 表示且。
输入格式
多组测试数据,第一行一个整数 表示数据组数。
对于每组测试数据:
- 第一行一个正整数 ,表示节点个数。
- 接下来 行,每行两个整数 表示第 个点的父亲编号,以及边上的字符。
- 接下来一行 个正整数 。
- 接下来一行 个非负整数 。
输出格式
输出一行 个整数 。
样例
输入
1
5
1 0
1 1
2 0
2 1
1 2 3 4 5
0 1 0 1 2
输出
3 4 6 8 5
以下表格表示当 固定时,式子中 的最大值:
| \ | 0 | 1 | 2 |
|---|---|---|---|
| 1 | 3 | ||
| 2 | 0 | 4 | |
| 3 | |||
| 4 | 0 | 4 | |
| 5 | 0 | 5 | |
数据规模与约定
对于所有数据保证:
具体测试点限制如下:
| 测试点编号 | 特殊性质 | |
|---|---|---|
| 1~2 | 100 | |
| 3~5 | ||
| 6~8 | ||
| 9~10 | A | |
| 11~12 | B | |
| 13~16 | ||
| 17~20 |
特殊性质 A:。
特殊性质 B:。