loj#P2831. 「JOISC 2018 Day 1」道路建设

「JOISC 2018 Day 1」道路建设

题目描述

译自 JOISC 2018 Day1 T1「高速道路の建設 / Construction of Highway

JOI 王国里有 NN 座城市,从 11NN 编号。11 号城市是首都。每个城市都有一个叫作「活跃度」的权值,第 i(1iN)i(1\le i\le N) 座城市的活跃度初始值是 CiC_{i}

JOI 王国里的每条道路双向连接两个不同的城市。开始时 JOI 王国里没有道路。你规划了 N1N-1 个道路建设项目。第 j(1jN1)j(1\le j\le N-1) 个项目会按以下方式完成:

  1. 指定两座城市 AjA_{j}BjB_{j},要求能沿着此时已经建设的道路从城市 11 走到城市 AjA_{j},且不能从城市 11 走到城市 BjB_{j}
  2. 建设一条连接城市 AjA_{j}BjB_{j} 的道路。建设过程的费用等于满足以下条件的城市对 (s,t)(s,t) 的个数:
    • sstt 在从城市 11 到城市 AjA_{j} 的最短路径上;
    • 当一个人从城市 11 走到 AjA_{j} 时,他会在经过 tt 之前经过 ss
    • ss 的活跃度严格大于 tt 的活跃度。
      在这里,「从城市 11 到城市 AjA_{j} 的最短路径上的城市」包括 11AjA_{j} 。注意从城市 11 到城市 AjA_{j} 的最短路径是唯一的。
  3. 将从城市 11 到城市 AjA_{j} 的最短路径上的所有城市的活跃度改变为城市 BjB_{j} 的活跃度。

你想知道每一次建设的费用。

任务

给出城市和道路建设的数据,请编程求出每一次建设的费用。

输入格式

输入数据的第一行包含一个整数 NN,表示 JOI 王国有 NN 座城市。

第二行包含 NN 个以空格分开的整数 C1,C2,,CNC_{1},C_{2},\dots, C_{N},表示第 i(1iN)i(1\le i\le N) 座城市的初始活跃度是 CiC_{i}

接下来 N1N-1 行中的第 jj 行包含两个以空格分开的整数 AjA_{j}BjB_{j},表示第 jj 次道路建设所指定的两个端点编号分别为 AjA_{j}BjB_{j}

输出格式

输出到标准输出,共 N1N-1 行,第 j(1jN1)j(1\le j\le N-1) 行包含一个整数表示第 jj 次道路建设的费用。

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

数据范围与提示

全部的输入数据满足以下条件:

  • 1N1000001\le N\le 100000
  • 1Ci109(1iN)1\le C_{i}\le 10^{9} (1\le i\le N)
  • 1AjN(1jN1)1\le A_{j}\le N(1\le j\le N-1)
  • 1BjN(1jN1)1\le B_{j}\le N(1\le j\le N-1)
  • 对于第 j(1jN1)j(1\le j\le N-1) 次建设,能沿着此时已经建设的道路从城市 11 走到城市 AjA_{j},且不能从城市 11 走到城市 BjB_{j}

子任务 1(7 分)

N500N\le 500

子任务 2(9 分)

N4000N\le 4000

子任务 3(84 分)

没有额外限制。