#P5803. [SEERC2019] Tree Permutations
[SEERC2019] Tree Permutations
题目描述
有一天,Cool 先生建了一棵 个点的树(没有环的无向连通图),他给任一编号 的点规定了两个值: 代表点 的父节点,与 代表 与 之间的边的边权。点 是树根,所以它没有父节点。
你想知道 Cool 先生建的树长啥样,但是 Cool 先生拒绝告诉你,但他给了你一些提示:
他把所有的 和 值写成一列,得到了长为 的数列 。
$$b=[p_2, w_2, p_3, w_3, \dots, p_{n-1}, w_{n-1}, p_n, w_n] $$然后他将其随机打乱,得到了数列 ,并将 告诉你。
然而只知道数列 是无法还原那棵树的,你决定解决一个更难的问题。
定义一个树是 长的,当且仅当点 到点 的路径上有恰好 条边。
定义一个树是 完美的,当且仅当这棵树是 长的且点 到点 的路径上的边的边权之和是所有 长的树中最大的。
你的任务是计算出每个 值对应的 完美的树中,点 到点 的路径上的边的边权之和。如果某个 值不存在 完美的树,则在该位置输出 。
输入格式
第一行包含一个整数 ,代表树上的节点数。
第二行包含 个整数 ,代表数列 中的数字。
输出格式
输出一行,共 个空格隔开的整数 ,其中 代表 完美的树中点 到点 的路径上的边的边权之和。如果不存在 长的树,则 。
3
1 1 2 2
2 3
3
2 2 2 2
-1 -1
6
1 4 5 4 4 4 3 4 4 2
-1 -1 -1 17 20
提示
第一个样例中, 完美的树由数列 构成(即,), 完美的树由数列 构成(即,)。以下是这两棵树的图形(点 到点 的路径上的边都为粗线)。
第二个样例中,不存在能通过重排 构造出的 完美的树。
第三个样例中,只有 完美的和 完美的树可以被构造出。它们分别由数列 和 构成。以下是这两棵树的图形。