Ctrl K

Дерево на равные части

Сложная
Дано дерево из n узлов с номерами от 0 до n - 1. У узла i есть вес weights[i], а links[j] = [a, b] — связь между узлами a и b. Некоторые связи можно разрезать — дерево распадётся на части. Вес части — сумма весов её узлов. Верните наибольшее число связей, которые можно разрезать так, чтобы все получившиеся части имели одинаковый вес. Если делить нельзя, ответ 0.
Пример 1
weights=[3, 1, 2, 3, 3], links=[[0, 1], [1, 2], [1, 3], [3, 4]] → 3

Общий вес 12. Разрезаем связи [0, 1], [1, 3] и [3, 4]: получаются части {0}, {1, 2}, {3}, {4} по 3 каждая. Это 3 разреза, больше не выйдет.

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

Общий вес 11 — простое число, поэтому поделить дерево на несколько равных частей нельзя.

Пример 3
weights=[7], links=[] → 0
Ограничения
  • 1 ≤ n ≤ 2·10⁴, n = len(weights)
  • 1 ≤ weights[i] ≤ 50
  • len(links) = n − 1, связи образуют дерево
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиБлижайший взаимно простой предок СложнаяДругие порядки для того же дерева поиска СложнаяВстреча видов мха СложнаяПуть в дереве без одинаковых соседей СложнаяТочка встречи на маршруте Сложная
загружаем Python…
Вход
weights=[3, 1, 2, 3, 3], links=[[0, 1], [1, 2], [1, 3], [3, 4]]
Ожидается
3

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