P1051树的价值tree

时间限制 2000 ms内存限制 512 MiB通过率 50.0%
显示算法标签树形 DP · 状态压缩 DP

【题目描述】

给定一棵 nn 个结点的有根树,其中结点 11 为根,结点 ii2in2\leq i\leq n)的父亲结点为结点 pip_i

对于 1in1\leq i\leq n,定义结点 ii 的深度 did_i 为结点 11 到结点 ii 的简单路径的边数。也就是说,d1=0d_1=0di=dpi+1d_i=d_{p_i}+12in2\leq i\leq n)。定义有根树的高度 hh 为所有结点深度的最大值,即 h=maxi=1ndih=\max_{i=1}^{n}d_i

给定高度的上界 mm。在本题中,给定的有根树的高度不超过 mm

每个结点 uu 有一个整数权值 aua_u。另外,给定一个长度为 nn 的整数序列 b1,b2,,bnb_1,b_2,\ldots,b_n,其中 bjb_j 表示长度为 jj 的链对应的价值系数。权值 aua_u价值系数 bjb_j 均可能为负数。

若一个结点没有儿子,则称这个结点为叶子。设树中共有 kk 个叶子。小 X 会选择一个由所有叶子组成的排列 q1,q2,,qkq_1,q_2,\ldots,q_k,并按照这个顺序依次探索这些叶子。这个排列称为一个探索序列

当小 X 探索叶子 qiq_i 时,会观察从根到 qiq_i 的简单路径,并取出这条路径上此前从未被探索过的所有结点,记这些结点组成的集合为 SiS_i。此前已经探索过的所有根到叶路径构成一棵包含根的连通子树,因此 SiS_i 中的结点一定构成一条连续的、从上向下的链,称为第 ii 次探索的新探索链

tit_i 表示 SiS_i 中深度最小的结点,li=Sil_i=|S_i| 表示这条新探索链的长度。定义第 ii 次探索产生的探索价值atiblia_{t_i}b_{l_i},并定义这个探索序列的总价值为

i=1katibli.\sum_{i=1}^{k}a_{t_i}b_{l_i}.

定义这棵树的价值为所有探索序列的总价值的最大值。

你需要求出给定有根树的价值

【输入格式】

本题包含多组测试数据。

从文件 tree.in\textbf{\textit{tree.in}} 中读入数据。

输入的第一行包含一个非负整数 cc 与一个正整数 TT,分别表示测试点编号与测试数据组数。c=0c=0 表示该测试点为样例。

接下来依次输入每组测试数据。对于每组测试数据:

第一行包含两个正整数 n,mn,m,分别表示结点数量与高度的上界。

第二行包含 n1n-1 个正整数 p2,p3,,pnp_2,p_3,\ldots,p_n,分别表示每个结点的父亲结点。

第三行包含 nn 个整数 a1,a2,,ana_1,a_2,\ldots,a_n,分别表示每个结点的权值。

第四行包含 nn 个整数 b1,b2,,bnb_1,b_2,\ldots,b_n,分别表示不同链长对应的价值系数

【输出格式】

输出到文件 tree.out\textbf{\textit{tree.out}} 中。

对于每组测试数据,输出一行一个整数,表示给定有根树的价值

【样例 1 输入】

0 25 21 1 2 23 -2 4 5 12 -1 3 0 04 31 2 3-3 2 -1 57 0 2 -4

【样例 1 输出】

2712

【说明/提示】

【样例 1 解释】

对于第一组测试数据,树中的叶子为结点 3,4,53,4,5

小 X 可以选择探索序列 5,3,45,3,4。第一次探索叶子 55 时,S1={1,2,5}S_1=\{1,2,5\},产生的探索价值a1b3=3×3=9a_1b_3=3\times3=9。第二次探索叶子 33 时,S2={3}S_2=\{3\},产生的探索价值a3b1=4×2=8a_3b_1=4\times2=8。第三次探索叶子 44 时,S3={4}S_3=\{4\},产生的探索价值a4b1=5×2=10a_4b_1=5\times2=10

这个探索序列的总价值为 9+8+10=279+8+10=27。可以证明,不存在总价值更大的探索序列,因此这棵树的价值2727

对于第二组测试数据,结点 44 是唯一的叶子。唯一的探索序列44,此时 S1={1,2,3,4}S_1=\{1,2,3,4\},产生的探索价值a1b4=(3)×(4)=12a_1b_4=(-3)\times(-4)=12,因此这棵树的价值1212

【样例 2】

见选手目录下的 tree/tree2.in\textbf{\textit{tree/tree2.in}}tree/tree2.ans\textbf{\textit{tree/tree2.ans}}

该附加样例满足测试点 3,43,4 的数据范围。

【样例 3】

见选手目录下的 tree/tree3.in\textbf{\textit{tree/tree3.in}}tree/tree3.ans\textbf{\textit{tree/tree3.ans}}

该附加样例满足测试点 13,1413,14 的数据范围。

【样例 4】

见选手目录下的 tree/tree4.in\textbf{\textit{tree/tree4.in}}tree/tree4.ans\textbf{\textit{tree/tree4.ans}}

该附加样例满足测试点 18,1918,19 的数据范围。

【样例 5】

见选手目录下的 tree/tree5.in\textbf{\textit{tree/tree5.in}}tree/tree5.ans\textbf{\textit{tree/tree5.ans}}

该附加样例满足测试点 202520\sim 25 的数据范围。

【数据范围】

测试点编号nn\leqmm\leq
1,21,277n1n-1
3,43,41313n1n-1
5,65,61818n1n-1
7,87,84040n1n-1
9,109,10120120n1n-1
11,1211,12360360n1n-1
13,1413,144×1034\times 10^322
151715\sim 174×1034\times 10^31010
18,1918,194×1034\times 10^35050
202520\sim 258×1038\times 10^3800800

对于所有测试数据,保证:

  • 0c250\leq c\leq251T51\leq T\leq5
  • 2n8×1032\leq n\leq8\times10^31mmin(n1,800)1\leq m\leq\min(n-1,800)
  • 对于所有 2in2\leq i\leq n,均有 1pii11\leq p_i\leq i-1
  • 给定的有根树的高度不超过 mm
  • 对于所有 1in1\leq i\leq n,均有 106ai,bi106-10^6\leq a_i,b_i\leq10^6

【题解】

已公开 1 篇题解,官方题解会优先显示。

查看题解