«Нарастающий край» в сетевом потоке

Нам задан сетевой поток, а также максимальный поток в сети. Ребро будет называться возрастающим ребром, если увеличение его пропускной способности на произвольное положительное число также увеличит максимальный поток.

Представьте алгоритм, который находит возрастающее ребро (если оно существует) и работает за $O(n^2)$.

Я подумал о следующей идее -

  • Найдите минимальный разрез в графе, полученный с помощью алгоритма Форда-Фулкерсона.
  • Увеличьте пропускную способность всех ребер в левой части разреза на 1.
  • Запустите BFS в остаточной сети, чтобы узнать, существует ли улучшенный путь. Если он существует, у нас есть возрастающее преимущество. Чтобы найти его, мы должны сравнить исходную сеть с новой сетью. Мы должны сделать это n раз, поскольку нам нужно проверять улучшенный путь каждый раз, когда мы увеличиваем емкость на 1.

Это правильно, и я в соответствии с требуемым временем работы?

Спасибо!


person Assaf    schedule 17.08.2018    source источник


Ответы (1)


Я думаю, вам просто нужно найти путь от источника к приемнику, который был бы увеличивающим путем, если увеличить емкость не более чем одного узла.

Сначала найдите все лучшие пути к вершинам, которых вы можете достичь с остаточной емкостью. Если вы нашли раковину, то вам изначально не дали максимальный поток.

Затем найдите все остальные вершины, смежные с этими через ребра, которые заполнены.

Затем попытайтесь найти увеличивающий путь от этих вершин к стоку.

Общая сложность равна O(N), поэтому тот, кто задал вам этот вопрос, вероятно, имел в виду что-то другое.

person Matt Timmermans    schedule 17.08.2018