luogu#P10065. [SNOI2024] 字符树
[SNOI2024] 字符树
题目描述
给你一个 个点的有根树,根为 。每条边上有一个字符 。 表示从根到 的路径上每条边的字符依次写下来组成的字符串。保证每个节点向儿子的边上的字符互不相同。
对每个点 ,有一个价值 和一个限制 。对每个点 ,如果点 满足 是 的后缀。那么我们认为 是的 扩展点。
Alice 手里有一个字符串 ,初始令 ,现在他可以删掉若干末尾的字符,使得 变成 。并将 告诉给 Bob。
Bob 获得了一个字符串 ,他需要在 之后加入若干字符,并获得 。对于某个 的扩展点 ,满足 ,并且 ,那么 Bob 就获得了 的收益,当然 Bob 只能进行一次这样的操作,所以他会选择符合条件的 里, 最大的那个。如果没有符合条件的 ,Bob 只能获得 的收益。
现在 Alice 想知道,对于删除 个字符,总计 种删除方式里 Bob 能获得权值之和是多少?
对于每个 ,你都需要回答 Alice 的询问。
形式化地说:
我们需要对每个点 求出 $\mathit{ans}_u = \sum\limits_{0 \le i \le \lvert S_u \rvert} \max\limits_{i \ge a_v \land S_u = S_v[\lvert S_v \rvert - \lvert S_u \rvert + 1, \lvert S_v \rvert] \land S_u[1, i] = S_v[1, i]} \mathit{val}_v$。
特殊的,如果对于某个 ,不存在任何 满足条件,那么 。
其中 表示字符串 的第 到第 个字符组成的字符串。特殊的, 表示空串。 表示字符串 的长度, 表示且。
输入格式
多组测试数据,第一行一个整数 表示数据组数。
对于每组测试数据,第一行一个正整数 ,表示节点个数。
接下来 行,每行两个整数 表示第 个点的父亲编号,以及边上的字符。
接下来一行 个正整数 $\mathit{val}_1, \mathit{val}_2, \ldots, \mathit{val}_n$。
接下来一行 个非负整数 。
输出格式
输出一行 个整数 $\mathit{ans}_1, \mathit{ans}_2, \ldots, \mathit{ans}_n$。
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
提示
【样例 #1 解释】
以下表格表示当 固定时,式子中 的最大值。
- | |||||
- |
【样例 #2】
见附件中 tree/tree2.in
与 tree/tree2.ans
。
这个样例满足测试点 的条件限制。
【样例 #3】
见附件中 tree/tree3.in
与 tree/tree3.ans
。
这个样例满足测试点 的条件限制。
【样例 #4】
见附件中 tree/tree4.in
与 tree/tree4.ans
。
这个样例满足测试点 的条件限制。
【数据范围】
对于所有数据保证 ,,,,,。
具体如下:
测试点编号 | 特殊性质 | |
---|---|---|
无 | ||
A | ||
B | ||
无 | ||
特殊性质 A:。
特殊性质 B:。