Потоки-2 (26 марта)
- Заканчиваем рассуждение про max на пути за O(1)
- У нас есть сжатие путей. У нас есть умение подвешивать "нижний к верхнему", хотим переделать на "меньший к большему".
- Случай #1: value[up] ≥ value[down], можно и так, и так подвешивать. Для удобства сделаем set(down, value[up]).
- Случай #2: value[up] < value[down], тогда не подвешиваем, а запоминаем ссылку на ребёнка child[up] = down
- Что делать, если у up уже был child? Берём меньшего из двух и проводим ребро наверх.
- Эдмондс-Карп, доказательство корректности
- Вспоминаем алгоритм
- Lm о длине путей
- Количество насыщений каждого ребра ≤ V/2
- Алгоритм Диница поиска потока
- Алгоритм. Отличие от Эдмондса-Карпа: каждый путь ищется за O(V). Получаем алгоритм за O(V2E).
- Соединяем алгоритм Диница и алгоритм масштабирования. Получаем алгоритм за O(VElogU).
- Диниц для единичных сетей, блокирующий поток за O(E).
- Хопркрофт-Карп для поиска паросочетания в двудольном графе, O(EV1/2).
- Остаточные сети и теоремы Каразанова
- Рассмотрим любые два потока |f1| ge |f|, (f1 - f) − поток в Gf
- Рассмотрим максимальный поток f* и поток fk после k шагов Диница. Рассмотрим декомпозицию (f* - fk), она состоит из путей длины хотя бы k, поэтому в ней не более (∑ci) / k путей.
- Более сильное утверждение − Теорема Карзанова: число итераций алгоритма Диница не более корня из (P = ∑ min(cin, cout)). E3/2 на единичных сетях.
- Лемма: |f* - fk| ≤ U(|V|/L)2. Где U − максимальная пропускная способность, L − максимальная длина кратчайшего пути.
- Вторая Теорема Каразанова. Число итераций алгоритма Диница в графе с целочисленными пропускными способностями не более 2U1/3|V|2/3.
- [L,R]
- Несколько истоков и стоков.
- Потоки с избытками и недостатками в вершинах.
- Поиск [L,R] циркуляции
- Поиск [L,R] потока: решение через Flow
- Поиск [L,R] потока: решение через MinCostFlow
- Поиск [L,R] максимального потока: дополнение до максимального
- [не успеем] Модификая Диница с LinkCut-Tree за O(VElogV).
- [не успеем] Нарисуем дерево кратчайших путей с корнем в стоке.
- [не успеем] Возьмём путь от истока до стока. Как за O(logn) учесть этот путь?