luogu#P5803. [SEERC2019] Tree Permutations

[SEERC2019] Tree Permutations

题目描述

有一天,Cool 先生建了一棵 nn 个点的树(没有环的无向连通图),他给任一编号 i>1i > 1 的点规定了两个值:pi<ip_i < i 代表点 ii 的父节点,与 wiw_i 代表 iipip_i 之间的边的边权。点 11 是树根,所以它没有父节点。

你想知道 Cool 先生建的树长啥样,但是 Cool 先生拒绝告诉你,但他给了你一些提示:

他把所有的 pip_iwiw_i 值写成一列,得到了长为 2n22 \cdot n - 2 的数列 bb

$$b=[p_2, w_2, p_3, w_3, \dots, p_{n-1}, w_{n-1}, p_n, w_n] $$

然后他将其随机打乱,得到了数列 aa,并将 aa 告诉你。

然而只知道数列 aa 是无法还原那棵树的,你决定解决一个更难的问题。

定义一个树是 kk的,当且仅当点 11 到点 nn 的路径上有恰好 kk 条边。

定义一个树是 kk 完美的,当且仅当这棵树是 kk的且点 11 到点 nn 的路径上的边的边权之和是所有 kk的树中最大的。

你的任务是计算出每个 kk 值对应的 kk 完美的树中,点 11 到点 nn 的路径上的边的边权之和。如果某个 kk 值不存在 kk 完美的树,则在该位置输出 1-1

输入格式

第一行包含一个整数 n (2n105)n \ (2 \leq n \leq 10^5),代表树上的节点数。

第二行包含 2n22 \cdot n -2 个整数 a1,a2,,a2n2 (1ain1)a_1, a_2, \dots, a_{2n-2} \ (1 \leq a_i \leq n-1),代表数列 aa 中的数字。

输出格式

输出一行,共 n1n-1 个空格隔开的整数 w1,w2,w3,,wn1w_1, w_2, w_3, \dots, w_{n-1},其中 wkw_k 代表 kk 完美的树中点 11 到点 nn 的路径上的边的边权之和。如果不存在 ii的树,则 wi=1w_i=-1

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

提示

第一个样例中,11 完美的树由数列 [1,2,1,2][1, 2, 1, 2] 构成(即,p2=1,w2=2,p3=1,w3=2p_2=1, w_2=2, p_3=1, w_3=2),22 完美的树由数列 [1,2,2,1][1, 2, 2, 1] 构成(即,p2=1,w2=2,p3=2,w3=1p_2=1, w_2=2, p_3=2, w_3=1)。以下是这两棵树的图形(点 11 到点 nn 的路径上的边都为粗线)。

样例1

第二个样例中,不存在能通过重排 aa 构造出的 kk 完美的树。

第三个样例中,只有 44 完美的和 55 完美的树可以被构造出。它们分别由数列 [1,4,2,4,3,4,4,4,4,5][1, 4, 2, 4, 3, 4, 4, 4, 4, 5][1,4,2,4,3,4,4,4,5,4][1, 4,2, 4, 3, 4, 4, 4, 5, 4] 构成。以下是这两棵树的图形。

样例3