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

Задача . D. XOR на дереве


Дано дерево с \(n\) вершинами, пронумерованными от \(1\) до \(n\). В вершине \(i\) записано целое число \(a_{i}\) для каждого \(i = 1, 2, \ldots, n\). Ваша цель — сделать все \(a_{i}\) одинаковыми, выполнив несколько заклинаний (возможно, ни одного).

Предположим, что корнем дерева выбрана некоторая вершина. Чтобы выполнить заклинание, можно выбрать произвольную вершину \(v\) и произвольное неотрицательное целое число \(c\). Затем для каждой вершины \(i\) в поддереве\(^{\dagger}\) \(v\) нужно заменить \(a_{i}\) на \(a_{i} \oplus c\). Стоимость такого заклинания равна \(s \cdot c\), где \(s\) — число вершин в поддереве. Здесь \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Пусть \(m_r\) — минимально возможная суммарная стоимость, за которую можно сделать все \(a_i\) равными, в случае если вершина \(r\) выбрана корнем дерева. Найдите \(m_{1}, m_{2}, \ldots, m_{n}\).

\(^{\dagger}\) Пусть вершина \(r\) выбрана корнем дерева. Тогда вершина \(i\) принадлежит поддереву \(v\), если простой путь от \(i\) до \(r\) содержит \(v\).

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

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^{4}\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

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

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i < 2^{20}\)).

Каждая из следующих \(n-1\) строк содержит два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\)), означающих наличие ребра между вершинами \(u\) и \(v\).

Гарантируется, что заданные ребра образуют дерево.

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

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

Для каждого набора входных данных выведите \(m_1, m_2, \ldots, m_n\) на отдельной строке.

Примечание

В первом наборе входных данных, чтобы найти \(m_1\), подвесим дерево за вершину \(1\).

  1. На первом заклинании выберем \(v=2\) и \(c=1\). После выполнения этого заклинания \(a\) станет равным \([3, 3, 0, 1]\). Стоимость этого заклинания равна \(3\).
  2. На втором заклинании выберем \(v=3\) и \(c=3\). После выполнения этого заклинания \(a\) станет равным \([3, 3, 3, 1]\). Стоимость этого заклинания равна \(3\).
  3. На третьем заклинании выберем \(v=4\) и \(c=2\). После выполнения этого заклинания \(a\) станет равным \([3, 3, 3, 3]\). Стоимость этого заклинания равна \(2\).

Теперь все значения в массиве \(a\) одинаковы, а суммарная стоимость равна \(3 + 3 + 2 = 8\).

Значения \(m_2\), \(m_3\), \(m_4\) находятся аналогично.

Во втором наборе входных данных цель уже достигнута, поскольку в дереве всего одна вершина.


Примеры
Входные данныеВыходные данные
1 2
4
3 2 1 0
1 2
2 3
2 4
1
100
8 6 12 10 
0

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

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