Олимпиадный тренинг

Задача . D. Сбалансированное дерево


Дано дерево\(^{\text{∗}}\) с \(n\) вершинами и значениями \(l_i, r_i\) для каждой вершины. Вы можете выбрать начальные значения \(a_i\), удовлетворяющие условию \(l_i\le a_i\le r_i\) для \(i\)-й вершины. Дерево считается сбалансированным, если все значения в вершинах равны, а значение сбалансированного дерева определяется как значение любой вершины.

За одну операцию вы можете выбрать две вершины \(u\) и \(v\) и увеличить значения всех вершин в поддереве\(^{\text{†}}\) вершины \(v\) на \(1\), рассматривая \(u\) как корень всего дерева. Обратите внимание, что \(u\) может быть равен \(v\).

Ваша цель — выполнить последовательность операций так, чтобы дерево стало сбалансированным. Найдите минимально возможное значение дерева после выполнения этих операций. Обратите внимание, что вам не нужно минимизировать количество операций.

\(^{\text{∗}}\)Деревом называется связный граф без циклов.

\(^{\text{†}}\)Вершина \(w\) принадлежит поддереву вершины \(v\), если любой путь от корня \(u\) до \(w\) проходит через \(v\).

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество входных наборов данных.

Первая строка каждого набора данных содержит одно целое число \(n\) (\(1 \le n \le 2\cdot 10^5\)) — количество вершин в дереве.

Затем следуют \(n\) строк. \(i\)-я строка содержит два целых числа \(l_i,r_i\) (\(0\le l_i \le r_i\le 10^9\)) — ограничения на значение \(i\)-й вершины.

Следующие \(n-1\) строк содержат ребра дерева. \(i\)-я строка содержит два целых числа \(u_i,v_i\) (\(1\le u_i,v_i \le n\), \(u_i \neq v_i\)) — ребро, соединяющее \(u_i\) и \(v_i\). Гарантируется, что заданные ребра образуют дерево.

Гарантируется, что сумма \(n\) по всем наборам данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора данных выведите одно целое число — минимально возможное значение, к которому могут быть приведены все \(a_i\) после выполнения операций. Можно доказать, что ответ всегда существует.

Примечание

В первом наборе данных вы можете выбрать \(a=[6,6,0,5]\).

Вы можете выполнить следующие операции, чтобы сделать все \(a_i\) равными:

  1. Выберите \(u=4\), \(v=3\) и выполните операцию \(5\) раз.
  2. Выберите \(u=1\), \(v=3\) и выполните операцию \(6\) раз.

Полный процесс показан ниже (числа в скобках — значения \(a\)):

Можно доказать, что это оптимальное решение.


Примеры
Входные данныеВыходные данные
1 6
4
0 11
6 6
0 0
5 5
2 1
3 1
4 3
7
1 1
0 5
0 5
2 2
2 2
2 2
2 2
1 2
1 3
2 4
2 5
3 6
3 7
4
1 1
1 1
1 1
0 0
1 4
2 4
3 4
7
0 20
0 20
0 20
0 20
3 3
4 4
5 5
1 2
1 3
1 4
2 5
3 6
4 7
5
1000000000 1000000000
0 0
1000000000 1000000000
0 0
1000000000 1000000000
3 2
2 1
1 4
4 5
6
21 88
57 81
98 99
61 76
15 50
23 67
2 1
3 2
4 3
5 3
6 4
11
3
3
5
3000000000
98

time 3000 ms
memory 512 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w643
Комментарий учителя