Ctrl K

Переключения по рёбрам дерева

Сложная
Дано дерево из n вершин с номерами от 0 до n - 1; edges[i] = [u, v] — ребро между u и v. В вершине i записано число values[i], также дан ключ key. Операцию можно делать сколько угодно раз (в том числе ни разу): выбрать любое ребро [u, v] и заменить оба числа на его концах: values[u] = values[u] XOR key, values[v] = values[v] XOR key. Верните наибольшую сумму чисел во всех вершинах, которой можно добиться.
Пример 1
values=[4, 1, 6], key=5, edges=[[0, 1], [1, 2]] → 11

После переключения 4 → 1, 1 → 4, 6 → 3. Выгодно только второе, а меняются вершины всегда парой. Переключив ребро (0, 1), получаем [1, 4, 6] — та же сумма 11, что и без операций; больше не выйдет.

Пример 2
values=[10, 10], key=1, edges=[[0, 1]] → 22

Одно переключение даёт [11, 11], сумма 22.

Пример 3
values=[1, 2, 3, 0], key=6, edges=[[0, 1], [0, 2], [0, 3]] → 22
Ограничения
  • 2 ≤ n = len(values) ≤ 2 · 10⁴
  • 1 ≤ key ≤ 10⁹
  • 0 ≤ values[i] ≤ 10⁹
  • len(edges) = n - 1, рёбра образуют дерево
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиСамая сильная команда СредняяНаибольшее число, кратное трём СложнаяЛучший порядок дегустационного сета СложнаяСбор монет: пошлина или половина СложнаяОтменить как можно меньше встреч Средняя
загружаем Python…
Вход
values=[4, 1, 6], key=5, edges=[[0, 1], [1, 2]]
Ожидается
11

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 90 тестов на сервере, включая скрытые.