Да, минимальный разрез является «узким местом» для потока, также |Min-Cut| = Max-flow
. Если вам интересно, в Интернете есть масса доказательств (это известно как теорема о максимальном потоке и минимальном разрезе).
Для вашего алгоритма нет необходимости удалять случайные ребра на первом шаге, удаление одного ребра из min-cut уменьшает max-flow потоком, который проходит через это ребро (в данном случае 1
, потому что все веса равны 1
согласно заявлению).
Таким образом, решение просто:
- Найдите любые Min-Cut
- Delete
min(K, |Min-cut|
ребер из графика)
Найти Min-Cut можно очень легко:
- Построить остаток потоковый граф
- Запустите на нем любой алгоритм максимального потока (Ford-Fulkerson, Bellman-Ford и др. c)
- Теперь выполните BFS из исходного узла, только go через ребра, где значение потока меньше, чем пропускная способность
- Теперь все ребра, которые go от посещенного узла к непосещаемому, образуют минимальный разрез