Тут давече прошел пятый CodeSprint. Интересно, как решается вот эта задача: https://www.hackerrank.com/contests/codesprint5/challenges/hacker-country
Стандартное для похожих задач решение с бинпоиском и флойдом ожидаемо ловило таймлимит на половине тестов. Я вижу что кто-то его втолкал ища отрицательный циклы дийкстрой (О.о) вместо флойда, но интересно правильное решение.
Решение чуть лучше: все как у Вас, только ищем отрицательный цикл алгоритмом Форда-Беллмана с очередью.
Удивлен, что ИТМОшники еще не набежали и не рассказали про то, как эта задача решается за чистый куб. У них, ведь, это задание по алгоритмам и структурам данных (номер 78).
UPD. Погуглите по запросу "Minimum mean cycle", уже на первой странице куча статей и презентаций по теме.
Увидев этот комментарий, подумал, что это скорее всего упражнение из Кормена. Так и оказалось: можно найти в задачах после главы о кратчайших путях из одной вершины.
Да, это забавная штука. Только недавно слушал её на спецкурсе у Максима Бабенко. Если вкратце, то утверждается, что если насчитать Фордом-Беллманом массив D[k][v] — кратчайший путь длины ровно k до v из произвольной стартовой вершины 1, из которой достижимы все вершины графа, то минимальный средний вес цикла равен .
А есть простое объяснение почему это так? Я это видел в решении Гены, но до сих пор не понимаю, почему это работает.
http://courses.engr.illinois.edu/cs573/fa2012/lec/lec/16_flow_mincost.pdf