题目描述
给你一个 n 个点的有根树,根为 1。每条边上有一个字符 c={0,1} 。Su 表示从根到 u 的路径上每条边的字符依次写下来组成的字符串。保证每个节点向儿子的边上的字符互不相同。
对每个点 u,有一个价值 valu 和一个限制 au。对每个点 u,如果点 v 满足 Su 是 Sv 的后缀。那么我们认为 v 是的 u 扩展点。
Alice 手里有一个字符串 S,初始令 S=Su,现在他可以删掉若干末尾的字符,使得 S 变成 S′。并将 S′ 告诉给 Bob。
Bob 获得了一个字符串 S′,他需要在 S′ 之后加入若干字符,并获得 S′′。对于某个 u 的扩展点v,满足 S′′=Sv,并且 ∣S′∣≥av,那么 Bob就获得了 valv 的收益,当然 Bob 只能进行一次这样的操作,所以他会选择符合条件的 v 里,valv 最大的那个。如果没有符合条件的 v,Bob 只能获得 0 的收益。
现在 Alice 想知道,对于删除 0∼∣S∣ 个字符,总计 ∣S∣+1 种删除方式里 Bob 能获得权值之和是多少?
对于每个 u,你都需要回答 Alice 的询问。
形式化地说:
我们需要对每个点 u 求出 $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$。
特殊的,如果对于某个 u,不存在任何 v 满足条件,那么 max=0。
其中 S[l,r] 表示字符串S的第 l 到第 r 个字符组成的字符串。特殊的,S[x+1,x] 表示空串。∣S∣ 表示字符串 S 的长度,∧ 表示且。
输入格式
多组测试数据,第一行一个整数 T 表示数据组数。
对于每组测试数据,第一行一个正整数 n,表示节点个数。
接下来 n−1 行,每行两个整数fai,ci 表示第 i 个点的父亲编号,以及边上的字符。
接下来一行 n 个正整数 val1,val2,…,valn。
接下来一行 n 个非负整数 a1,a2,…,an。
输出格式
输出一行 n 个整数 ans1,ans2,…,ansn。
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,i 固定时,式子中 valv 的最大值。
|
u=1 |
u=2 |
u=3 |
u=4 |
u=5 |
i=0 |
3 |
0 |
3 |
0 |
0 |
i=1 |
|
4 |
3 |
4 |
i=2 |
|
|
|
4 |
5 |
数据范围与提示
对于所有数据保证 1≤T≤5, 1≤n≤5×105, 1≤vali≤109, 1≤fai<i,ci={0,1},0≤ai≤n。
具体如下:
测试点编号 |
n≤ |
特殊性质 |
1∼2 |
100 |
|
3∼5 |
2×103 |
6∼8 |
104 |
9∼10 |
105 |
A |
11∼12 |
B |
13∼16 |
|
17∼20 |
5×105 |
特殊性质 A:ci=0。
特殊性质 B:fai=⌊2i⌋。