ЛКШ 2016. Группа A. День 2. Потоки-2.
- C++
Память: стек, куча, статическая
int x[n]; // на стеке
int *new[]()
vector<bool>, vector<int>
vector<int>::insert,erase
- Алгоритм Диница поиска потока
- Алгоритм. Отличие от Эдмондса-Карпа: каждый путь ищется за O(V). Получаем алгоритм за O(VE+VK) = O(V2E), где K − количество найденных путей.
- Запускаем алгоритм Диница внутри масштабирования. Получаем алгоритм за O(VElogU).
- Диниц для единичных сетей, одна фаза Диница работает за O(E).
- [L,R]
- Несколько истоков и стоков.
- Интересный факт: задача про 2 пути NP-трудна (объяснить в чём разница с 2 истоками, стоками)
- Потоки с избытками и недостатками потока в вершинах.
- Поиск [L,R] циркуляции. O(Flow).
- Поиск [L,R] потока, сведение к циркуляции за O(1).
- Поиск [L,R] максимального потока: дополнение до максимального. O(Flow).
- Min Cost Flow
- Задачи min cost circulation, min cost k-flow
- Сведение min cost k-flow к min cost circulation, решение min cost circulation алгоритмом Клейна.
- Корректность. Lm: mincost ⇔ не существует отрицательного цикла в остаточной сети
- Решение min cost k-flow для графа без отрицательных циклов за O(k*FordBellman)
- Потенциалы. Алгоритм Джонсона.
- Потенциалы. Решение min cost k-flow для графа без отрицательных циклов за O(k*Dijkstra).
- Задача о назначениях.
- [skipped] Хопркрофт-Карп для поиска паросочетания в двудольном графе, O(EV1/2).
- [skipped] Поиск [L,R] потока: решение через MinCostFlow