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

Задача . G. Сакурако и Чефир


Дано дерево из \(n\) вершин с корнем в вершине \(1\). Гуляя по нему со своим котом Чефиром, Сакурако отвлеклась, и Чефир убежал.

Чтобы помочь Сакурако, Косукэ записал свои \(q\) предположений. В \(i\)-м предположении он считает, что Чефир потерялся в вершине \(v_i\) и имел \(k_i\) выносливости.

Также для каждого предположения Косукэ считает, что Чефир мог переместиться по рёбрам произвольное число раз:

  • из вершины \(a\) в вершину \(b\), если \(a\) является предком\(^{\text{∗}}\) \(b\), выносливость от этого не изменится;
  • из вершины \(a\) в вершину \(b\), если \(a\) не является предком \(b\), тогда выносливость Чефира понизится на \(1\).

Если выносливость Чефира равна \(0\), то он не сможет сделать перемещение второго типа.

Для каждого предположения ваша задача — вычислить расстояние до самой дальней вершины, в которую Чефир мог уйти от вершины \(v_i\), имея \(k_i\) выносливости.

\(^{\text{∗}}\)Вершина \(a\) является предком вершины \(b\), если кратчайший путь от \(b\) к корню проходит через \(a\).

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

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

Каждый набор входных данных описывается следующим образом:

  • Первая строка содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество вершин в дереве.
  • Следующие \(n-1\) строки содержат ребра дерева. Гарантируется, что заданные ребра образуют дерево.
  • Следующая строка состоит из одного целого числа \(q\) \((1\le q\le 2 \cdot 10^5)\), которое обозначает количество предположений Косукэ.
  • Следующие \(q\) строк описывают предположения, которые сделал Косукэ, двумя целыми числами \(v_i\), \(k_i\) \((1\le v_i \le n, 0 \le k_i\le n)\).

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

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

Для каждого теста и для каждого предположения выведите расстояние до самой дальней вершины, в которую Чефир мог пройти от начальной точки \(v_i\) имея \(k_i\) выносливости.

Примечание

В первом примере:

  • В первом запросе можно пройти из вершины \(5\) в вершину \(3\) (после этого выносливость уменьшится на \(1\) и станет равна \(0\)), после этого можно пройти в вершину \(4\);
  • Во втором запросе из вершины \(3\) имея \(1\) выносливости можно добраться только до вершин \(2\), \(3\), \(4\) и \(5\);
  • В третьем запросе из вершины \(2\) имея \(0\) выносливости можно добраться только до вершин \(2\), \(3\), \(4\) и \(5\);

Примеры
Входные данныеВыходные данные
1 3
5
1 2
2 3
3 4
3 5
3
5 1
3 1
2 0
9
8 1
1 7
1 4
7 3
4 9
3 2
1 5
3 6
7
6 0
2 3
6 2
8 2
2 4
9 2
6 3
6
2 1
2 5
2 4
5 6
4 3
3
3 1
1 3
6 5
2 1 2 
0 5 2 4 5 5 5 
1 3 4

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

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