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], [0, 3, 7]], values=[5, 6, 5, 8] → [7, 2]

Путь 0 → 1 → 2 не подходит: на вершинах 0 и 2 одно и то же число 5. Остаются 0 → 1 (длина 4), 1 → 2 (длина 3) и 0 → 3 (длина 7, 2 вершины) — он лучший.

Пример 2
edges=[[0, 1, 2], [1, 2, 2], [0, 3, 4]], values=[1, 2, 3, 4] → [4, 2]

Длину 4 дают и 0 → 1 → 2 (3 вершины), и 0 → 3 (2 вершины). Длина 4, из вариантов берём меньше вершин — 2.

Пример 3
edges=[[1, 0, 9]], values=[3, 3] → [0, 1]

На обеих вершинах 3, поэтому путь — одна вершина: длина 0, вершин 1.

Ограничения
  • 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], [0, 3, 7]], values=[5, 6, 5, 8]
Ожидается
[7, 2]

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