Проблема может быть описана следующим образом:
Произошел сбой сети узлов, и у каждого соединения (ребра) есть определенное время восстановления, пока оно не вернется в оперативный режим и два узла снова не соединятся. Наша цель состоит в том, чтобы найти путь между узлами с 1 по n, который запущен и работает раньше всех, и возвратить самое продолжительное время восстановления на этом пути.
Сеть можно представить в виде графа с неориентированными ребрами.
У нас есть три массива:
- Первый содержит исходные вершины
- Второй содержит вершины назначения
- Третий содержит время восстановления каждого соединения (края).
Пример:
{1,2,2,3}, {2,3,4,4}, {1,5,10,2}
где время восстановления соединения между узлами 1 и 2 равно 1 и т. д.
Оптимальный путь от 1 до n = 4 — это 1-2-3-4, так как максимальное время восстановления на этом пути равно 5, по сравнению с путем 1-2-4, где максимальное время восстановления равно 10.
Здесь важно отметить, что имеет значение только максимальное время восстановления на каждом пути, т. е. длина пути — это не сумма периодов ожидания, а длина самого длительного времени ожидания соединения. между двумя узлами для восстановления. Каждое время восстановления рассчитывается из t = 0, поэтому времена восстановления независимы, и порядок не имеет значения.
Итак, что нам нужно сделать здесь, так это найти путь, который имеет минимальное время восстановления из максимального времени восстановления на каждом пути, и вернуть это время.
Я подошел к этой проблеме, используя алгоритмы Дейкстры и Беллмана-Форда, но не могу понять, как модифицировать алгоритмы для получения желаемого результата. Может быть не более 10^5 соединений.