Ctrl K

Спуск с одним повтором

Сложная
Дано дерево из n вершин с номерами от 0 до n − 1, корень — вершина 0. Рёбра заданы списком edges: [u, v, w] — ребро длины w между u и v. На вершине i записано число values[i]. Рассмотрим пути, идущие только вниз: от какой-то вершины к одному из её потомков (путь может состоять и из одной вершины). Путь подходит, если числа на его вершинах различны, за одним допустимым исключением: какое-то одно число может встретиться ровно дважды. Длина пути — сумма длин его рёбер. Верните массив из двух чисел: наибольшую длину подходящего пути и наименьшее число вершин среди подходящих путей этой наибольшей длины.
Пример 1
edges=[[0, 1, 4], [1, 2, 3], [2, 3, 5]], values=[5, 6, 5, 6] → [8, 3]

Весь путь 0 → 1 → 2 → 3 не годится: повторяются и 5, и 6. Путь 0 → 1 → 2 (повторяется только 5) имеет длину 7, а 1 → 2 → 3 (повторяется только 6) — длину 8. Ответ: длина 8, вершин 3.

Пример 2
edges=[[0, 1, 2], [0, 2, 6]], values=[7, 7, 7] → [6, 2]

Число 7 может встретиться дважды, так что 0 → 2 подходит: длина 6, вершин 2.

Ограничения
  • 2 ≤ n ≤ 5·10⁴
  • len(edges) = n − 1, каждое ребро — [u, v, w]
  • 0 ≤ u, v < n
  • 1 ≤ w ≤ 1000
  • len(values) = n
  • 0 ≤ values[i] ≤ 5·10⁴
  • Рёбра образуют дерево
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиСпуск без повторов СложнаяКорни, подходящие под догадки СложнаяПалиндромные поддеревья СложнаяОстановить ветку процессов СредняяСуммы путей в закодированном дереве Средняя
загружаем Python…
Вход
edges=[[0, 1, 4], [1, 2, 3], [2, 3, 5]], values=[5, 6, 5, 6]
Ожидается
[8, 3]

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