Паросочетание в произвольном графе (15-е мая 2019)
- Псевдокод Габова за O(n3)
- mate[], p[], восстановление пути.
- Инициализация bfs, тело bfs, случаи петля, 1→2, 1→1
- Случай 1→1, сжатие цикла: b = LCA(v,x); go(v,x,b); go(x,v,b);
if mark[base[i]] then mark[base[i]] := b
.
- Пишем go(v,x,b) (картинка, где видно, что идти нужно до b1, b2, но не дальше)
- Картинка "сжатие уже сжатых циклов"
- Оптимизации
- Не обнулять пометки в Куне: V3 → |M|V2
- Жадная инициализация: нашли паросочетание размера ≥ |M|/2, соптимизили предыдущее в ≥ 2 раз
- Прикрутить DSU, чтобы дойти до O(nmα) - главное искать LCA за O(k) и сжимать цикл за O(k), расставлять p[] быстрее "пройти по пути" так и не научились
- Двойственность в LP
- Построение двойственных задач для Ax = b, x ≥ 0 | Ax ≤ b | Ax ≤ b, x ≥ 0
- Слабая и сильная теоремы двойственности
- Доказательство сильной теоремы двойственности: симплекс метод корректен и таскает за собой решения и прямой, и двойственной задач