Ctrl K

XOR двух непересекающихся поддеревьев

Сложная
Дано дерево из n узлов с номерами от 0 до n - 1, корень — узел 0. Рёбра заданы списком edges: пара [a, b] соединяет узлы a и b. У каждого узла есть вес weights[i]. Поддерево узла — это сам узел и все его потомки. Выберите два поддерева, у которых нет общих узлов, посчитайте сумму весов в каждом и возьмите побитовый XOR этих двух сумм. Верните наибольшее возможное значение. Если двух непересекающихся поддеревьев выбрать нельзя, верните 0.
Пример 1
n=5, edges=[[0, 1], [0, 2], [2, 3], [2, 4]], weights=[1, 9, 4, 2, 3] → 11

Сумма поддерева узла 1 равна 9, поддерева узла 2 — 4 + 2 + 3 = 9; 9 XOR 9 = 0. Лучше взять узлы 1 и 3: 9 XOR 2 = 11, или 1 и 4: 9 XOR 3 = 10. Ответ 11.

Пример 2
n=4, edges=[[0, 1], [1, 2], [2, 3]], weights=[5, 5, 5, 5] → 0

Дерево — цепочка, любые два поддерева вложены одно в другое, поэтому ответ 0.

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

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