最大最小路
题号:NC286365
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

\hspace{15pt}对于给定的无向无根树,第 i 个节点上有一个权值 w_i 。我们定义一条简单路径是好的,当且仅当:路径上的点的点权最小值小于等于 a ,路径上的点的点权最大值大于等于 b

\hspace{15pt}保证给定的 a < b ,你需要计算有多少条简单路径是好的。

输入描述:

\hspace{15pt}第一行输入三个整数 n, a, b\left(1 \leq n \leq 5 \times 10^5, 1 \leq a < b \leq 10^9\right) 代表节点数、给定的上下限。

\hspace{15pt}第二行输入 n 个整数 w_1, w_2, \dots, w_n\left(1 \leq w_i \leq 10^9\right) 代表每个节点的权值。

\hspace{15pt}此后 n - 1 行,每行输入两个整数 u, v\left(1 \leq u, v \leq n, u \neq v\right) 代表一条无向边连接树上 uv 两个节点。

输出描述:

\hspace{15pt}在一行上输出一个整数,代表好路径的条数。
示例1

输入

复制
5 2 3
5 4 3 3 1
1 2
1 3
3 4
3 5

输出

复制
4

说明

\hspace{15pt}对于这个样例,如下图所示。路径 2 \to 1 \to 3 \to 5 是好的,因为路径点权最小值 1 \leqq a 且点权最大值 5 \geqq b


\hspace{15pt}除此之外,以下路径也是好的:
\hspace{23pt}\bullet\,1 \to 3 \to 5
\hspace{23pt}\bullet\,3 \to 5
\hspace{23pt}\bullet\,4 \to 3 \to 5