Ctrl K

Тяжёлые ветки без общих узлов

Средняя
Дано дерево из n узлов с номерами от 0 до n − 1, корень — узел 0. Оно записано массивом links длины n: для i ≥ 1 пара links[i] = [p, w] означает, что родитель узла i — узел p, а ребро между ними весит w. У корня родителя нет, поэтому links[0] = [-1, -1]. Выберите несколько рёбер так, чтобы никакие два выбранных ребра не имели общего узла, а сумма их весов была как можно больше. Можно не выбрать ни одного ребра — тогда сумма равна 0. Верните наибольшую возможную сумму.
Пример 1
links=[[-1, -1], [0, 4], [1, 9], [1, 3], [0, 6]] → 15

Берём ветки 1–2 (вес 9) и 0–4 (вес 6): у них нет общих узлов, итого 15.

Пример 2
links=[[-1, -1], [0, -2], [1, -7]] → 0

Все веса отрицательные — выгоднее ничего не брать, ответ 0.

Пример 3
links=[[-1, -1], [0, 8], [0, 5], [0, 2]] → 8

Все три ветки сходятся в корне, поэтому можно взять только одну — самую тяжёлую, 8.

Ограничения
  • 1 ≤ n ≤ 10⁵
  • links[0] = [-1, -1]
  • Для i ≥ 1: 0 ≤ links[i][0] ≤ n − 1, links[i][0] ≠ i
  • Для i ≥ 1: -10⁶ ≤ links[i][1] ≤ 10⁶
  • links задаёт корректное дерево с корнем 0
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиСамое большое поддерево поиска СредняяКорпоратив без прямых начальников СредняяСпуск зигзагом СредняяУрожай со здорового дерева СредняяСамая большая одноцветная ветка Средняя
загружаем Python…
Вход
links=[[-1, -1], [0, 4], [1, 9], [1, 3], [0, 6]]
Ожидается
15

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