A93074.「SNOI2024」字符树

NOI/NOI+/CTSC

官方

通过率:0%

时间限制:7.00s

内存限制:256MB

题目描述

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

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

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

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

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

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

形式化地说:

我们需要对每个点 uu 求出 ansu=0iSumaxiavSu=Sv[SvSu+1,Sv]Su[1,i]=Sv[1,i]valvans_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,表示节点个数。

接下来 n1n - 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

    1
    5
    1 0
    1 1
    2 0
    2 1
    1 2 3 4 5 
    0 1 0 1 2
    

    输出#1

    3 4 6 8 5
    

说明/提示

对于所有数据保证 1T51 \le T \le 51n5×1051 \leq n \leq 5\times 10^5, 1vali1091\leq val_i\leq 10^9, 1fai<i,ci={0,1},0ain1\leq fa_i < i, c_i = \{0, 1\}, 0 \leq a_i \leq n

具体如下:

测试点编号 nn\leq 特殊性质
121\sim2 100100
353\sim5 2×1032\times10^3
686\sim8 10410^4
9109\sim10 10510^5 A
111211\sim12 10510^5 B
131613\sim16 10510^5
172017\sim20 5×1055\times10^5

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

特殊性质 B:fai=i2fa_i = \lfloor \frac{i}{2} \rfloor

首页