Кёниг, покрытие и независимое множество
Минимальное вершинное покрытие равно максимальному паросочетанию. Отсюда независимое множество, рёберное покрытие и обязательные рёбра.
4 мин
Теорема Кёнига. В двудольном графе размер минимального вершинного покрытия равен размеру максимального паросочетания.
Вершинное покрытие — набор вершин, такой что у каждого ребра хотя бы один конец в наборе.
Неравенство в одну сторону очевидно: рёбра паросочетания попарно не пересекаются, поэтому покрыть их все меньше чем вершинами нельзя. Содержательно то, что покрытие такого размера существует — и строится явно.
Построение
Возьмём максимальное паросочетание и запустим обход из свободных вершин доли по чередующимся путям: из левой доли идём по рёбрам не из , из правой возвращаемся по рёбрам из . Пусть и — посещённые вершины левой и правой доли.
for (int u = 0; u < n; u++) if (matchLeft[u] == -1) { seenLeft[u] = 1; queue.push_back(u); }
for (size_t head = 0; head < queue.size(); head++) {
int u = queue[head];
for (int v : adj[u]) {
if (seenRight[v] || matchLeft[u] == v) continue; // только рёбра не из M
seenRight[v] = 1;
int w = matchRight[v];
if (w != -1 && !seenLeft[w]) { seenLeft[w] = 1; queue.push_back(w); }
}
}
Почему это покрытие. Пусть ребро не покрыто: , . Из обход обязан был пойти по этому ребру. Если оно не из , то попала бы в . Если из , то была посещена приходом по нему из , то есть . Противоречие.
Почему размер равен . Каждая вершина из покрыта паросочетанием: свободные вершины слева все лежат в , а свободная вершина справа в означала бы увеличивающий путь. И никакое ребро не даёт в оба конца: если достигнута, её пара попала в и в не входит.
Обход обязан начинаться именно со свободных вершин. Запустив его из всех, вы получите покрытие, но не минимальное.
Что отсюда следует
Максимальное независимое множество. Дополнение независимого множества — это вершинное покрытие, поэтому в любом графе , а в двудольном
В произвольном графе задача NP-трудна; двудольность и есть то, что делает её полиномиальной.
Минимальное рёберное покрытие (набор рёбер, задевающий все вершины; требует отсутствия изолированных вершин) равно — теорема Галлаи. Построение: паросочетание плюс по одному ребру к каждой непокрытой вершине.
Недостача по Холлу: . Подставьте и посчитайте.
Ориентация: какие рёбра могут быть в паросочетании
Построим орграф : рёбра не из направим слева направо, рёбра из — справа налево. Тогда чередующиеся пути становятся обычными путями, и на два естественных вопроса есть ответы.
Ребро входит хотя бы в одно максимальное паросочетание, если оно из , либо и лежат в одной компоненте сильной связности (чередующийся цикл через ребро), либо достижима из свободной вершины левой доли, либо из достижима свободная вершина правой доли.
Три условия, а не одно: добавив ребро, приходится выкинуть два ребра паросочетания, и восстановить размер можно либо циклом, либо пристроив одну из освободившихся вершин к свободной. Ограничиться проверкой компоненты — типичная ошибка.
Ребро входит во все максимальные паросочетания, если оно из и не выполнено ни одно из трёх условий: концы в одной компоненте сильной связности; из левого конца достижима свободная вершина справа; правый конец достижим из свободной вершины слева.
Оба критерия — прямое следствие рассуждения про симметрическую разность: другое максимальное паросочетание отличается от чередующимися циклами и путями, начинающимися в свободных вершинах.
Где теорема ломается
Треугольник: максимальное паросочетание — одно ребро, минимальное покрытие — две вершины. Равенство держится на отсутствии нечётных циклов, то есть ровно на двудольности. В общем графе паросочетание всё ещё ищется за полином, а вершинное покрытие — уже NP-трудная задача.