Теорема Холла: как проверить, существует ли совершенное паросочетание в двудольном графе?
В задаче нужно понять, можно ли всех слева сопоставить кому-то справа (совершенное паросочетание со стороны левой доли). Слышал про условие Холла «о свадьбах». В чём оно состоит, как им пользоваться в доказательствах и что делать, если просто проверить наличие — запустить паросочетание?
2 ответа
Теорема Холла (о свадьбах): в двудольном графе с долями и существует паросочетание, покрывающее всю долю , тогда и только тогда, когда для любого подмножества выполнено:
где — множество всех вершин , смежных хотя бы с одной вершиной из . То есть «любая группа женихов знакома суммарно с не меньшим числом невест».
Как пользоваться:
- Для проверки в задаче перебирать все подмножеств обычно не нужно и дорого — проще запустить алгоритм паросочетания (Кун за ) и проверить, что его размер равен . Это эквивалентно условию Холла, но считается за полином.
- Условие Холла нужно для доказательств: когда требуется доказать, что совершенное паросочетание существует (или не существует — тогда предъявляют «дефицитное» подмножество с ).
Полезное следствие (теорема о дефиците): максимальное паросочетание покрывает вершин левой доли. Величина — «дефицит».
Частный случай: в регулярном двудольном графе (все степени равны ) совершенное паросочетание существует всегда — условие Холла выполняется автоматически. Это популярный факт на олимпиадах.
Дополню связкой с предыдущими теоремами. Холл, Кёниг и max-flow/min-cut — три проекции одного факта:
- Если совершенного паросочетания нет, то по Холлу есть с .
- Тогда минимальное вершинное покрытие (берём и ), значит по Кёнигу максимальное паросочетание .
Поэтому на практике: хотите число пар — гоните паросочетание; хотите доказать невозможность — ищите нарушающее подмножество (его, кстати, можно восстановить из конструкции Кёнига — это непокрытые вершины слева и их окрестность).