Потоки в сетях
Максимальный поток: теорема о разрезе, алгоритм Эдмондса-Карпа и приложения к паросочетаниям.
Сеть — ориентированный граф, где у каждого ребра есть пропускная способность. Максимальный поток — сколько «жидкости» можно прогнать из истока s в сток t.
Фундаментальная теорема (Форда-Фалкерсона): максимальный поток равен минимальному разрезу — минимальной суммарной пропускной способности рёбер, удаление которых отделяет s от t. Поэтому потоками решаются задачи и про «сколько прогнать», и про «что перерезать».
Алгоритм Эдмондса-Карпа: пока существует путь из s в t с положительными остаточными пропускными способностями (ищем его BFS), пускаем по нему поток и обновляем ОСТАТОЧНУЮ сеть: прямые рёбра уменьшаем, обратные увеличиваем. Обратные рёбра — ключ: они позволяют «передумать» и перенаправить уже пущенный поток.
Эдмондс-Карп, исток 1, сток n. Введите: 4 5, затем «a b пропускная»: 1 2 3, 1 3 2, 2 3 1, 2 4 2, 3 4 3
На примере максимальный поток равен 5: 2 единицы по пути 1→2→4, 2 по 1→3→4 и ещё 1 по 1→2→3→4.
Сложность Эдмондса-Карпа — O(V·E²); для плотных задач существует более быстрый алгоритм Диница.
Главное практическое применение — двудольные паросочетания: максимальное число пар «студент-проект», где каждый в одной паре. Стройте сеть: исток → студенты (пропускная 1) → допустимые проекты (пропускная 1) → сток. Максимальный поток = максимальное паросочетание.
Задание: смоделируйте на бумаге задачу «3 работника, 3 задачи, кто какую умеет» как сеть и прогоните через программу выше (пронумеруйте: 1 — исток, 2-4 — работники, 5-7 — задачи, 8 — сток).
Отметьте урок пройденным.