u와 v가 B의 동일한 노드 x와 일치하는 A의 두 노드가되도록합시다. 두 노드 중 하나를 선택하여 u라고 부르고 일치하는 부분에서 x로 가장자리를 제거하십시오. 이제 A에서 노드의 n-1과 B에서 노드의 n-1 사이의 일치가있는 그래프가 남았습니다. 문제는 더 큰 것으로 만들기 위해이 일치를 확장 할 수 있는지 여부입니다.
Berge 's theorem을 사용하여이 작업을 수행하는 정말 좋은 방법은 두 개의 불일치하는 노드 사이에 경로가없는 경우에만 그래프에서 일치가 최대라는 것입니다. 교차 경로는 일치 항목에 포함되지 않은 모서리와 일치 항목에 포함 된 모서리를 번갈아 사용하는 것입니다. 노드 u에서 시작하여 수정 된 2 진 검색을 수행하여 x에 대한 경로를 찾으려고하면 A와 B 사이에서 우연히 일치하지 않는 가장자리를 따라갈 수 있고 B에서 A로 이동하면 x와 같은 경로를 찾을 수 있습니다. 당신은 단지 일치하는 가장자리를 따릅니다. u에서 x까지 번갈아 가며있는 경로가 있다면,이 방법을 찾아야합니다. 그런 경로가 없다면 그 경로도 확실 할 것입니다.
u에서 x까지의 경로가 교차하는 경우 "뒤집어서"일치하는 크기를 1 씩 늘릴 수 있습니다. 특히, 일치하는 경로에없는 모든 가장자리를 가져 와서 추가하고 일치하는 모든 가장자리를 가져 와서 삭제하십시오. 결과는 당신이 시작한 것보다 한가지 더 많은 모서리가있는 유효한 매칭입니다. (이것이 왜 보이지 않거나, 몇 가지 예를 가지고 놀고, 찾은 것을 보거나, Berge의 정리의 증거를보세요.) .
전반적으로,이 접근법은 시간 O (m + n)을 필요로하며, 여기서 m은 그래프의 가장자리 수이고 n은 노드 수입니다. 가장자리 m의 수는 bipartite 그래프에서 O (n) 이하이므로 시간 경계에 일치합니다. 실제로는 실제로는 더 단단합니다.
대단히 고마워요! 방금이 문제를 내 대답의 네트워크 흐름 문제로 바꿨습니다 (이 문제는 책의 네트워크 흐름 섹션에서 가져온 것입니다). – HLC