Рассмотрим следующую задачу. Дан двудольный граф \[ G=(A,B,E) \] и для каждой вершины \[ x\in A \] задан положительный вес \[ w(x) \] . Требуется найти такое паросочетание в этом графе, чтобы сумма весов вершин из доли \[ A \] , инцидентных ребрам паросочетания, была максимальной. Эту задачу иногда интерпретируют следующим образом. \[ A \] - это множество работ, а \[ B \] - множество работников. Ребро в графе \[ G \] соединяет вершину \[ a\in A \] с вершиной \[ b\in B \] , если квалификация работника \[ b \] позволяет ему выполнить работу \[ a \] . Каждая работа выполняется одним работником. Выполнение работы \[ a \] принесет прибыль \[ w(a) \] . Требуется так распределить обязанности работников, чтобы максимизировать общую прибыль. Покажем, что эта задача может быть решена алгоритмом СПО в сочетании с методом чередующихся цепей.
Множество \[ X\subseteq A \] назовем отображаемым, если в графе \[ G \] существует паросочетание \[ M \] , насыщающее все вершины из \[ X \] . \[ M \] в этом случае будем называть отображением для \[ X \] . Пусть \[ \Phi \] - семейство всех отображаемых множеств.
Теорема 3. Пара \[ (A,\Phi) \] является матроидом.
Доказательство. Условие (1) определения матроида, очевидно, выполняется. Докажем, что выполняется и условие (2). Пусть \[ X\in \Phi \] , \[ Y\in \Phi \] , \[ |X| < |Y| \] . Рассмотрим подграф \[ H \] графа \[ G \] , порожденный всеми вершинами из \[ X\cup Y \] и всеми смежными с ними вершинами из доли \[ B \] . Пусть \[ M_{X} \] - отображение для \[ X \] . Так как \[ M_{X} \] не является наибольшим паросочетанием в графе \[ H \] , то по теореме 6 относительно него в этом графе существует увеличивающая цепь. Одним из концов этой цепи является свободная относительно \[ M_{X} \] вершина \[ a\in Y \] . После увеличения паросочетания \[ M_{X} \] с использованием этой цепи, как было описано выше, получим паросочетание \[ M' \] , отображающее множество \[ X\cup \{a\} \] . Следовательно, \[ X\cup \{a\} \in \Phi \] .
Даже если бы в задаче требовалось найти только отображаемое множество наибольшего веса, проверка принадлежности множества семейству \[ \Phi \] требовала бы и нахождения соответствующего отображения, т.е. паросочетания. На самом же деле построение паросочетания входит в условие задачи. Комбинируя СПО с алгоритмом поиска увеличивающих цепей, получаем следующий алгоритм.
Алгоритм 2. Построение паросочетания наибольшего веса в двудольном графе \[ G=(A,B,E) \] с заданными весами вершин доли \[ A \] .
Если для поиска увеличивающей цепи применить метод поиска в ширину, как описано выше, то время поиска будет пропорционально числу ребер. Общая трудоемкость алгоритма будет \[ O(mk) \] , где \[ k \] - число ребер в доле \[ A \] .