Ctrl K

Разброс цен маршрутов от лучшего старта

Сложная
В заповеднике count стоянок с номерами от 0 до count − 1, соединённых тропами trails так, что между любыми двумя стоянками есть ровно один путь (это дерево). Посещение стоянки i стоит fees[i]. Выберите стартовую стоянку s. Маршрут — это путь по тропам, который начинается в s и не проходит ни одну стоянку дважды; его цена — сумма сборов всех стоянок на нём, включая s и последнюю. Маршрут может состоять из одной s. Разброс для старта s — разница между самым дорогим и самым дешёвым маршрутом из s. Верните наибольший разброс по всем возможным стартам.
Пример 1
count=5, trails=[[0, 1], [1, 2], [1, 3], [3, 4]], fees=[2, 6, 1, 3, 9] → 18

Выйдем из стоянки 2: самый дорогой маршрут 2 → 1 → 3 → 4 стоит 1 + 6 + 3 + 9 = 19, самый дешёвый — остаться на месте за 1. Разброс 18, больше не получить.

Пример 2
count=1, trails=[], fees=[7] → 0

Стоянка одна, маршрут только один — из неё самой, поэтому разброс 0.

Ограничения
  • 1 ≤ count ≤ 10⁵
  • len(trails) = count − 1, тропы образуют дерево
  • len(fees) = count
  • 1 ≤ fees[i] ≤ 10⁵
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиКорни, подходящие под догадки СложнаяПоездки со скидкой по дереву СложнаяСбор монет: пошлина или половина СложнаяСамая большая одноцветная ветка СредняяСамый тяжёлый путь в дереве Сложная
загружаем Python…
Вход
count=5, trails=[[0, 1], [1, 2], [1, 3], [3, 4]], fees=[2, 6, 1, 3, 9]
Ожидается
18

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