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

Задача . E2. Деление весов (сложная версия)


Простая и сложная версии на самом деле являются разными задачами, поэтому прочитайте условия обеих задач внимательно.

Вам задано взвешенное корневое дерево, вершина \(1\) — корень этого дерева. Также каждое ребро имеет свою собственную стоимость.

Дерево — это связный граф без циклов. У корневого дерева есть специальная вершина, называемая корнем. Предком вершины \(v\) называется последняя отличная от \(v\) вершина на пути от корня к вершине \(v\). Потомками вершины \(v\) называются все вершины, для которых \(v\) является предком. Вершина называется листом, если у нее нет потомков. Взвешенное дерево — это такое дерево, в котором у каждого ребра есть некоторый вес.

Вес пути — это сумма весов всех ребер на этом пути. Вес пути от вершины до самой себя равен \(0\).

Вы можете совершить последовательность из нуля или более ходов. В течение одного хода вы можете выбрать ребро и поделить его вес на \(2\) с округлением вниз. Более формально, в течение одного хода вы выбираете какое-то ребро \(i\) и делите его вес на \(2\) с округлением вниз (\(w_i := \left\lfloor\frac{w_i}{2}\right\rfloor\)).

Каждое ребро \(i\) имеет свою стоимость \(c_i\), которая равна либо \(1\), либо \(2\) монетам. Каждый ход с ребром \(i\) стоит \(c_i\) монет.

Ваша задача — найти минимальную суммарную стоимость, необходимую для того, чтобы сделать сумму весов путей от корня до каждого листа не превосходящей \(S\). Другими словами, если \(w(i, j)\) — это вес пути от вершины \(i\) до вершины \(j\), то вам необходимо сделать \(\sum\limits_{v \in leaves} w(root, v) \le S\), где \(leaves\) — это список всех листьев.

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

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

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

Первая строка набора тестовых данных содержит два целых числа \(n\) и \(S\) (\(2 \le n \le 10^5; 1 \le S \le 10^{16}\)) — количество вершин в дереве и максимально возможная сумма весов, которую вы можете получить. Следующая \(n-1\) строка описывает ребра дерева. Ребро \(i\) описывается четырьмя целыми числами \(v_i\), \(u_i\), \(w_i\) и \(c_i\) (\(1 \le v_i, u_i \le n; 1 \le w_i \le 10^6; 1 \le c_i \le 2\)), где \(v_i\) и \(u_i\) — вершины, которые соединены ребром \(i\), \(w_i\) — вес этого ребра, а \(c_i\) — цена этого ребра.

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

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

Для каждого набора тестовых данных выведите ответ на него: минимальную суммарную стоимость, необходимую, чтобы сделать сумму весов путей от корня до каждого листа не превосходящей \(S\).


Примеры
Входные данныеВыходные данные
1 4
4 18
2 1 9 2
3 2 4 1
4 1 1 2
3 20
2 1 8 1
3 1 7 2
5 50
1 3 100 1
1 5 10 2
2 3 123 2
5 4 55 1
2 100
1 2 409 2
0
0
11
6

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

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