Потоки. Введение.
- 2 неперсекающихся по ребрам пути - поток. k неперсекающихся по ребрам пути - поток.
- Определение потока (f) в общем случае. 0 <= f <= c. Сумма f для каждой вершины = 0. f[e] = -f[e']
- Решение задачи о k неперсекающихся по ребрам пути. Картинка, почему "просто k раз пустить dfs" не работает.
- Непересекающиеся по вершинам пути. Раздвоение вершин.
- Разрез C(A,B) - разрез между множествами. C(s,t) - разрез между вершинами. |C(s,t)| >= |f(s,t)|.
- Теорема и алгоритм Форда-Фалкерсона. Если нет дополняющего пути, |C(s,t)| = |f(s,t)|. Алгоритм ищет и поток, и разрез за O(|f|*E)
- Нахождение паросочетания в двудольном графе с помощью потока за O(VE).
Потоки. Алгоритмы поиска.
- Пускаем каждый раз максимум по пути
- Алгоритм Эдмондса-Карпа за O(VE2) (пускаем bfs)
- Масштабирование за O(E2logMax) (пускаем не менее 2k)
- 1 + 3 = O(E2)
MinCost Потоки.
- Задача: ищем поток размера k минимального веса. Обратное ребро имеет вес (-w).
- Формулировки прикладных задач: Задача о назначениях. Транспортная задача.
- Алгоитм поиска: База = нет отрицательных циклов, переход = добавляем инимальный путь.
- Док-во корректности: рассмотрим разность mincost потока размера (k+1) и mincost потока размера (k).
- Улучшенные алгоритмы поиска пути: Форд-Белман с очередью и Дейкстра.
Потоки. Обобщение.
- Вершинные потоки
- Потоки с несколькими истоками, стоками
Задачи
- Покрытие грида с дырками доминошками
- Футбольный турнир от Пети Митричева
- Восстановление матрицы по суммам в сторках и столбцах