Задача №1625. Санная трасса
Разбор добавил Александр Чистяков
Представим каждый контур как вершину графа. Соединим ребром вершины i и j если не существует контура k такого что i вложен в k, а k вложен в j (и наоборот). Чтобы построить такой граф нужно для каждой вершины выбрать контур минимального радиуса, содержащего в себе обрабатываемую вершину (это можно сделать за N^2). Вокруг лежащую территорию также можно принять за контур бесконечно большого радиуса и не обрабатывать отдельно. Теперь из каждой вершины запустим поиск в ширину и будем выбирать максимальный перепад высот для всех пар вершин удалённых не более чем на K. (Поскольку построенный граф представляет собой дерево, сложность одного поиска можно принять за O(N)). Итоговая сложность равна O(N^2). Примечание: в данном решении мы пренебрегаем условием о том что сани не могут въехать в область расположенную выше стартовой позиции. Докажем почему этим условием можно пренебречь: Пусть мы считаем что наилучший маршрут имеет вид a1 -> a2 -> ... -> ai -> ... -> ak и вытота hi > hk. Но тогда перепад высот на более коротком маршруте ai -> a(i+1) -> ... -> ak будет больше чем на предполагаемом.
Сдать: для сдачи задач необходимо войти в систему
2465
statement