Потоки. Крутые алгоритмы поиска.
- Диница за O(V2E)
- Диница + масштабирование за O(VElogMax)
- Хопкрофт-Карп за O(EsqrtV)
[L,R] Потоки
- Потоки с избытками и недостатки в вершинах, сток и исток отсутствуют
- Потоки с избытками и недостатки в вершинах, некоторые вершины могут быть стоками и истоками.
- [L,R] потоки.
- Решение за O(MinCostFlow).
- Решение за O(Flow): Ребро [L,R] заменяем на ребро [0,R-L] и избыток и недостаток в концых ребра.
Паросочетания
- Матрица Татта, det = многочлен
- Теорема Татта: det тождественно равен нулю тогда и только тогда, когда не существует совершенного паросочетания
- Рандомизированный алгоритм проверки совершенности
- Алгоритм построения макс паросочетания в произвольном графе
Задачи
- [matching] Задачка про такси, сведение к паросочетанию.
- [matching] Задача с РОИ: каждый пассажир = отрезок дней [ai, bi], в каждый день может улететь K пассажиров
- [cover] Замощение грида минимальным числом палок 1xN
- [cover] Удаление графа
- [flow] Округление вещественной матрицы округленными числами с сохранением суммы в строках и столбцах
- [independent set] party
- [max clique] birthday
- Not read [cut] Задача про заказы и инструменты
- [mincost-flow] Нужно последовательность разбить на K подпоследовательностей: разница индексов не более X, разница значений не более Y.
Задачи (2-я серия)
- Дан произвольный двудольный граф, нужно разбить его на минимальное кол-во паросочетаний.
- Покрытие ацикличного графа цепями
- Максимальная антицепь (двойственность с покрытием)
Про математику
- Поиск обратного к x mod 2n за O(logn)
Memory Managment и Garbage Collection
- Not read gc: ссылки
- Not read gc: список всего, и offline обход от существующих корней
- mm: рекурсивная функция и стэк
- mm: объекты одинакового размера и список
- mm: real life - многие объекты имеют одинаковый размер
- mm: list of objects [2k..2k+1), линейное время
- mm: дефрагментация
- mm: выделение самого малого куска соответствующего размера от начала, склейка свободных при освобождении