C1081 [Contest #5]迫真小游戏

内存限制:256 MB 时间限制:2000 ms

题目描述

H君喜欢在阳台晒太阳,闲暇之余他会玩一些塔防小游戏。

H君玩的小游戏可以抽象成一棵 $n$ 个节点的有根树,树以 $1$ 为根,每个点的深度定义为其到根的简单路径上的点数(根的深度为 $1$)。

H君有 $n$ 个干员,H君会按照某种顺序把她们部署到树的每一个节点上,使得每个节点上恰好有一个干员。由于游戏的机制,他们对每个节点 $i$ 都给出了个限制参数 $a_i$ ,要求H君在第 $i$ 个节点部署干员之前,所有深度 $> a_i$ 的节点上不能有干员。同时游戏为了让玩家过关,保证了 $a_i$ 大于等于点 $i$ 的深度。

H君将每一次部署干员的节点按顺序写在纸上,形成了一个 $1 \dots n$ 的排列,H君为了获得更多的奖励,想要最小化这个排列的字典序。

我们认为排列 $c_1,c_2..c_n$ 的字典序比排列 $d_1,d_2..d_n$ 的字典序小,当且仅当 $c, d$ 不完全相同且存在一个下标 $i$,满足 $c_i < d_i$ 且对于所有 $1 \le j < i$ 的 $j$ 都有 $c_j = d_j$ 。

输入格式

第一行一个数 $n$ 。

接下来 $n - 1$ 行,每行两个数 $x, y$ 表示树上的一条边 。

最后一行 $n$ 个数,表示 $a_i$ 。

数据范围:

$1\le n \le 5 \times 10^5, 1 \le a_i \le n$。

输出

第一行 $n$ 个数,表示字典序最小的排列。

样例

样例输入 1

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

样例输出 1

1 4 5 2 3

样例输入 2

10 1 7 7 8 7 2 8 9 7 6 2 4 9 5 8 10 6 3 5 3 4 4 5 3 5 3 5 4

样例输出 2

1 2 6 7 8 3 4 9 10 5

提示