#300. 树屋

树屋

题目背景

在一片神秘的森林,里面有 NN 个古老的树屋,每个树屋上都刻着一个独特的数字 aia_i。这些树屋通过 N1N-1 条吊桥连接,形成了一张巨大的树形网络,没有任何环路,保证每个树屋都可以通过吊桥到达。森林的入口是树屋 11,每个吊桥连接着两个树屋 uiu_iviv_i。现在,你是一个勇敢的探险家,从入口树屋 11 开始,沿着吊桥前往每个树屋 kk(从 11NN)。在探险过程中,你会记录下沿途经过的树屋上刻着的数字,按照从 11kk 的最短路径顺序,组成一个数字序列。

对于每一个目标树屋 kk,找到这个数字序列中最长的上升子序列的长度。所谓“最长上升子序列”,就是从序列中挑出一些数字,组成一个新的子序列 Ai1,Ai2,...,AiMA_{i_1}, A_{i_2}, ..., A_{i_M},要求这些数字严格递增(即 Ai1<Ai2<...<AiMA_{i_1} < A_{i_2} < ... < A_{i_M}),并且位置按照原序列的顺序(即 1i1<i2<...<iML1 \leq i_1 < i_2 < ... < i_M \leq L,其中 LL 是序列长度),使得这个子序列的长度 MM 尽可能大。

输入格式

  • 第一行:一个整数 NN,表示树屋数量。
  • 第二行:NN 个整数 a1,a2,...,aNa_1, a_2, ..., a_N,表示每个树屋上刻的数字。
  • 接下来 N1N-1 行:每行两个整数 ui,viu_i, v_i,表示一条吊桥连接树屋 uiu_i 和树屋 viv_i

输出格式

输出 NN 行,第 kk 行表示从树屋 11 到树屋 kk 的最短路径上形成的数字序列的最长上升子序列的长度。

数据范围

  • 2N2×1052 \leq N \leq 2 \times 10^5(树屋数量在 2 到 200,000 之间)
  • 1ai1091 \leq a_i \leq 10^9(每个树屋上的数字是 1 到 10910^9 之间的整数)
  • 1ui,viN1 \leq u_i, v_i \leq N(吊桥连接的树屋编号在合法范围内)
  • uiviu_i \neq v_i(吊桥不会连接同一个树屋)
  • 给定的吊桥网络是一棵树(无环,保证连通)
  • 输入的所有值均为整数

样例

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

样例说明

以从树屋 11 到树屋 55 的路径为例:

  • 最短路径是 123451 \to 2 \to 3 \to 4 \to 5
  • 沿途数字序列为 1,2,5,3,41, 2, 5, 3, 4
  • 其中最长的上升子序列是 1,2,3,41, 2, 3, 4(对应位置 A1,A2,A4,A5A_1, A_2, A_4, A_5),长度为 44。 因此,第 5 行的输出是 44