Ctrl K

Маршруты между равными вершинами

Сложная
Горные стоянки пронумерованы от 0 до n - 1 и соединены тропами так, что получается дерево: между любыми двумя стоянками ровно один путь без повторов. heights[i] — высота стоянки i, а links[j] = [a, b] — тропа между стоянками a и b. **Маршрутом** назовём простой путь по тропам, у которого: - начальная и конечная стоянки на одной высоте; - ни одна стоянка на пути не выше концов. Одна стоянка сама по себе тоже маршрут. Путь и он же в обратную сторону — один и тот же маршрут. Верните количество различных маршрутов.
Пример 1
heights=[2, 1, 2, 3], links=[[0, 1], [1, 2], [2, 3]] → 5

Четыре маршрута из одной стоянки и ещё один: 0 → 1 → 2. Его концы на высоте 2, а стоянка 1 ниже. Маршрут к стоянке 3 не подходит: она выше и единственная на своей высоте.

Пример 2
heights=[1, 4, 1], links=[[0, 1], [1, 2]] → 3

Стоянки 0 и 2 на одной высоте, но путь между ними проходит через более высокую стоянку 1. Остаются только три маршрута из одной стоянки.

Пример 3
heights=[5, 5, 1], links=[[0, 2], [1, 2]] → 4
Ограничения
  • n == len(heights)
  • 1 ≤ n ≤ 3·10⁴
  • 0 ≤ heights[i] ≤ 10⁵
  • len(links) == n - 1
  • 0 ≤ a, b < n, a ≠ b
  • Тропы образуют дерево
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиОткрытые комнаты от холла СредняяКого вылечить первым СложнаяКого отключить от сети СложнаяУровни клеток по строкам и столбцам СложнаяПоездки на самокате с лимитом дороги Сложная
загружаем Python…
Вход
heights=[2, 1, 2, 3], links=[[0, 1], [1, 2], [2, 3]]
Ожидается
5

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