#P4043. 「SNOI2024」字符树

「SNOI2024」字符树

题目描述

给你一个 nn 个点的有根树,根为 11。每条边上有一个字符 c={0,1}c = \{0, 1\} 。SuS_u 表示从根到 uu 的路径上每条边的字符依次写下来组成的字符串。保证每个节点向儿子的边上的字符互不相同。

对每个点 uu,有一个价值 valuval_u 和一个限制 aua_u。对每个点 uu,如果点 vv 满足 SuS_u 是 SvS_v 的后缀。那么我们认为 vv 是的 uu 扩展点。

Alice 手里有一个字符串 SS,初始令 S=SuS = S_u,现在他可以删掉若干末尾的字符,使得 SS 变成 S′S'。并将 S′S' 告诉给 Bob。

Bob 获得了一个字符串 S′S',他需要在 S′S' 之后加入若干字符,并获得 S′′S''。对于某个 uu 的扩展点vv,满足 S′′=SvS'' = S_v,并且 ∣S′∣≥av|S'| \ge a_v,那么 Bob就获得了 valvval_v 的收益,当然 Bob 只能进行一次这样的操作,所以他会选择符合条件的 vv 里,valvval_v 最大的那个。如果没有符合条件的 vv,Bob 只能获得 00 的收益。

现在 Alice 想知道,对于删除 0∼∣S∣0 \sim |S| 个字符,总计 ∣S∣+1|S| + 1 种删除方式里 Bob 能获得权值之和是多少?

对于每个 uu,你都需要回答 Alice 的询问。

形式化地说:

我们需要对每个点 uu 求出 $ans_u = \sum\limits_{0 \le i \le |S_u|} \max\limits_{i \ge a_v\land S_{u}=S_v[|S_v|-|S_u|+1, |S_v|] \land S_u[1, i] = S_v[1, i]} val_v$。

特殊的,如果对于某个 uu,不存在任何 vv 满足条件,那么 max⁡=0\max = 0。

其中 S[l,r]S[l, r] 表示字符串SS的第 ll 到第 rr 个字符组成的字符串。特殊的,S[x+1,x]S[x + 1, x] 表示空串。∣S∣|S| 表示字符串 SS 的长度,∧\land 表示且。

输入格式

多组测试数据,第一行一个整数 TT 表示数据组数。

对于每组测试数据,第一行一个正整数 nn,表示节点个数。

接下来 n−1n - 1 行,每行两个整数fai,cifa_i, c_i 表示第 ii 个点的父亲编号,以及边上的字符。

接下来一行 nn 个正整数 val1,val2,…,valnval_1, val_2, \dots, val_n。

接下来一行 nn 个非负整数 a1,a2,…,ana_1, a_2, \dots, a_n。

输出格式

输出一行 nn 个整数 ans1,ans2,…,ansnans_1, ans_2, \dots, 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

以下表格表示当 u,iu, i 固定时,式子中 valvval_v 的最大值。

u=1u=1 u=2u=2 u=3u=3 u=4u=4 u=5u=5
i=0i=0 33 00 33 00 00
i=1i=1 44 33 44
i=2i=2 44 55

数据范围与提示

对于所有数据保证 1≤T≤51 \le T \le 5, 1≤n≤5×1051 \leq n \leq 5\times 10^5, 1≤vali≤1091\leq val_i\leq 10^9, 1≤fai<i,ci={0,1},0≤ai≤n1\leq fa_i < i, c_i = \{0, 1\}, 0 \leq a_i \leq n。

具体如下:

测试点编号 n≤n\leq 特殊性质
1∼21\sim2 100100
3∼53\sim5 2×1032\times10^3
6∼86\sim8 10410^4
9∼109\sim10 10510^5 A
11∼1211\sim12 B
13∼1613\sim16
17∼2017\sim20 5×1055\times10^5

特殊性质 A:ci=0c_i = 0。

特殊性质 B:fai=⌊i2⌋fa_i = \lfloor \frac{i}{2} \rfloor。