← Все вопросы

Теорема Холла: как проверить, существует ли совершенное паросочетание в двудольном графе?

Задан 11 месяцев назад659 просмотров2 ответа
8

В задаче нужно понять, можно ли всех слева сопоставить кому-то справа (совершенное паросочетание со стороны левой доли). Слышал про условие Холла «о свадьбах». В чём оно состоит, как им пользоваться в доказательствах и что делать, если просто проверить наличие — запустить паросочетание?

2 ответа

14
✓ Принятый ответ — помог автору

Теорема Холла (о свадьбах): в двудольном графе с долями LL и RR существует паросочетание, покрывающее всю долю LL, тогда и только тогда, когда для любого подмножества S⊆LS \subseteq L выполнено:

∣N(S)∣≥∣S∣,|N(S)| \ge |S|,

где N(S)N(S) — множество всех вершин RR, смежных хотя бы с одной вершиной из SS. То есть «любая группа женихов знакома суммарно с не меньшим числом невест».

Как пользоваться:

  • Для проверки в задаче перебирать все 2∣L∣2^{|L|} подмножеств обычно не нужно и дорого — проще запустить алгоритм паросочетания (Кун за O(VE)O(VE)) и проверить, что его размер равен ∣L∣|L|. Это эквивалентно условию Холла, но считается за полином.
  • Условие Холла нужно для доказательств: когда требуется доказать, что совершенное паросочетание существует (или не существует — тогда предъявляют «дефицитное» подмножество SS с ∣N(S)∣<∣S∣|N(S)| < |S|).

Полезное следствие (теорема о дефиците): максимальное паросочетание покрывает ∣L∣−max⁡S(∣S∣−∣N(S)∣)|L| - \max_S(|S| - |N(S)|) вершин левой доли. Величина max⁡S(∣S∣−∣N(S)∣)\max_S(|S|-|N(S)|) — «дефицит».

Частный случай: в регулярном двудольном графе (все степени равны k>0k>0) совершенное паросочетание существует всегда — условие Холла выполняется автоматически. Это популярный факт на олимпиадах.

5

Дополню связкой с предыдущими теоремами. Холл, Кёниг и max-flow/min-cut — три проекции одного факта:

  • Если совершенного паросочетания нет, то по Холлу есть SS с ∣N(S)∣<∣S∣|N(S)|<|S|.
  • Тогда минимальное вершинное покрытие <∣L∣< |L| (берём N(S)N(S) и L∖SL\setminus S), значит по Кёнигу максимальное паросочетание <∣L∣< |L|.

Поэтому на практике: хотите число пар — гоните паросочетание; хотите доказать невозможность — ищите нарушающее подмножество SS (его, кстати, можно восстановить из конструкции Кёнига — это непокрытые вершины слева и их окрестность).

Ваш ответ

, чтобы ответить на вопрос.