树上区间取值 - 代码源竞赛平台

题目描述

蜗蜗得到一棵有 nn 个节点的树,节点编号为 11 到 nn。第 ii 个节点有一个允许区间 [li,ri][l_i,r_i]。

蜗蜗需要给每个节点选择一个整数 xix_i,满足 li≤xi≤ril_i\le x_i\le r_i。对于连接节点 uu 和 vv 的一条边,这条边的价值为 ∣xu−xv∣|x_u-x_v|。整棵树的价值等于所有边的价值之和。

请你求出这棵树能够获得的最大价值。

输入格式

第一行包含一个整数 TT,表示测试用例数量。

对于每组测试用例:

  • 第一行包含一个整数 nn,表示节点数量;
  • 接下来 nn 行,第 ii 行包含两个整数 lil_i 和 rir_i,表示第 ii 个节点的允许区间;
  • 接下来 n−1n-1 行,每行包含两个整数 uu 和 vv,表示节点 uu 与节点 vv 之间有一条无向边。

输出格式

对于每组测试用例,输出一行一个整数,表示整棵树能够获得的最大价值。

样例

1
2
1 4
2 7
1 2
6

样例解释

给节点 11 选择整数 11,给节点 22 选择整数 77,唯一一条边的价值为 ∣1−7∣=6|1-7|=6。

数据范围

对于 100% 的数据,保证 1≤T≤2501\le T\le 250,2≤n≤1052\le n\le 10^5,1≤li≤ri≤1091\le l_i\le r_i\le 10^9,1≤u,v≤n1\le u,v\le n。

对于同一个输入文件中的所有测试用例,保证 nn 的总和不超过 2×1052\times 10^5。每组测试用例中的边都构成一棵树。