Ctrl K

Срезать ветки с нулевым весом

Средняя
Дано дерево из n вершин с номерами от 0 до n - 1, корень — вершина 0. Родитель вершины i — parent[i] (у корня parent[0] = -1), вес вершины — weight[i] (может быть отрицательным). Весом поддерева назовём сумму весов всех его вершин. Срежьте каждое поддерево, вес которого равен нулю, — вместе со всеми его вершинами. Верните, сколько вершин останется в дереве.
Пример 1
n=6, parent=[-1, 0, 0, 1, 1, 2], weight=[5, 3, 2, -1, -2, 1] → 3

Поддерево вершины 1 весит 3 - 1 - 2 = 0 и удаляется вместе с вершинами 3 и 4. Остаются вершины 0, 2 и 5 (их поддеревья весят 8 и 3).

Пример 2
n=4, parent=[-1, 0, 1, 1], weight=[2, -4, 1, 1] → 0

Сумма всего дерева 2 - 4 + 1 + 1 = 0 — удаляется всё дерево.

Пример 3
n=3, parent=[-1, 0, 0], weight=[0, 4, 7] → 3

Вес самой вершины 0 равен нулю, но важна сумма поддерева: 11. Ничего не удаляется.

Ограничения
  • 1 ≤ n ≤ 10⁵
  • len(parent) == len(weight) == n
  • parent[0] == -1, остальные 0 ≤ parent[i] < n
  • -10⁵ ≤ weight[i] ≤ 10⁵
  • Массив parent задаёт корректное дерево с корнем 0
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиОстановить ветку процессов СредняяНаименьшая общая территория СредняяОткрытые комнаты от холла СредняяГонка за сокровищами у ворот СредняяТочка встречи на маршруте Сложная
загружаем Python…
Вход
n=6, parent=[-1, 0, 0, 1, 1, 2], weight=[5, 3, 2, -1, -2, 1]
Ожидается
3

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