先把原图看成一棵以 1 为根的树。
对于每个节点 i(i>1),题目要求找到:
给定一棵以根节点 1 为根的无向树,节点编号为 1,2,...,n,每个节点 i 的权值为 xi 。对于每个节点 i(i>1) :
沿原树从 i 到根 1 的路径,找到离节点 i 最近的第一个权值严格大于 xi 的祖先节点 j ;
如果 j 存在,在节点 i 与节点 j 之间添加一条额外的无向边;否则,不进行任何操作。
在加入所有额外边之后,计算每个节点到根节点1的最短距离(以边数计)。
【名词解释】
祖先节点:在一棵以 u 为根的树中,若点 x 在 u 到 v 的简单路径上,且 x=v ,则称 x 是 v 的祖先节点。根节点没有祖先节点。
第一行输入整数 n(1≤n≤2×105),表示节点数量;
第二行输入 n 个整数 x1,x2,...,xn(1≤xi≤1011),表示各节点权值;
接下来 n−1 行,每行输入两个整数
在同一行输出 n 个整数 d1,d2,...,dn 以空格分隔,其中 di 表示在加入额外边之后,节点 i 到根节点 1 的最短距离,
在几乎全部的情况下,PyPy 的运行速度优于 Python,我们建议您选择对应版本的 PyPy进行提交、而不是 Python。
输入
7
7 1 2 3 4 5 6
1 2
2 3
3 4
5 4
5 6
6 7
输出
0 1 1 1 1 1 1
说明
原树是一条链:1−2−3−4−5−6−7,各点权值为 [7,1,2,3,4,5,6]。
对于每个节点 i>1,沿原树从 i 到 1 的路径,找到第一个权值严格大于 xi 的祖先并添加额外边:
添加所有额外边后,节点 2,...,7 均可通过新边直接到达根 1,距离均为 1;根节点 1 距离为 0。
输入
5
9 6 3 5 4
1 2
1 3
3 4
4 5
输出
0 1 1 1 2