20 #DMY25S1901. 兄弟

兄弟

兄弟

文件与限制

输入文件:sibling.in;输出文件:sibling.out。

时间限制:1 秒;空间限制:128 MiB。使用 C++14 O2。

题目描述

一棵 nn 个点的有根树,其中 11 号点为树根。除根节点之外,每个点都有父节点,记 ii 号点的父节点为 fif_i。两个不同的点 i,ji,j 是兄弟,当且仅当 fi=fjf_i=f_j。根节点没有兄弟。

第 ii 个点的权值为 aia_i。要求选出一个点集,该点集合法当且仅当点集中至多只有一对兄弟。可以选择空集,其权值和为 00。

在所有合法点集中,权值和的最大值、最小值分别是多少?

输入格式

第一行一个整数 nn。第二行 n−1n-1 个整数 f2,f3,…,fnf_2,f_3,\ldots,f_n(n=1n=1 时该行为空)。第三行 nn 个整数 a1,a2,…,ana_1,a_2,\ldots,a_n。

输出格式

输出两个整数,依次表示最大值和最小值。

样例 1

5
1 1 3 2
-1 -4 2 0 -2
2 -7

样例 2

见附加文件 samples.zip 中的 ex_sibling2.in/out。

数据范围

对于全部数据,1≤n≤1051\le n\le10^5,−109≤ai≤109-10^9\le a_i\le10^9;对 2≤i≤n2\le i\le n,1≤fi<i1\le f_i<i。

测试点 额外限制
1~2 n≤10n\le10
3~5 n≤100n\le100
6~7 ai≥0a_i\ge0
8~10 无