Раздел «Алгоритмы».BipartiteMatching:

Задача о максимальном числе парасочетании

Формулировка задачи

В двудольном графе? выбрать максимальное количество ребер, непересекающихся по вершинам.

Алгоритм

Первую долю будем называть девушками, а вторую парнями.

  1. Будем брать ребра, пока беруться.
  2. Построим следующий граф:
    • От замужних дувушек ведет только одно ребро — к мужу. Пусть эти ребра красные.
    • От остальных ребра оставим прежними.
  3. WFS: Ищем путь в графе от холостой девушки к холостому парню.
    • Для каждого найденного пути делаем преобразование графа:
      • Длина пути очевидным образом содержит нечетное число ребер 2n+1, причем через одно ребро красное — всего n красных ребер. Поменяем в этом пути красные ребра на некрасные, а красные сделаем красными. и GOTO WFS;

Сделует отметить прямую связь с задачей о максимальном потоке. Задача о паросочетаниях решается через максимальный поток:

Примеры реализаций

Related