이분 매칭은 서로 다른 집단인 A집단과 B집단을 서로 매칭 시켜주는 주는 것 이다.
두 개의 정점 그룹이 존재할 때 모든 간선(경로)의 용량이 1이면서 양쪽 정점이 서로 다른 그룹에 속하는 그래프를 이분 그래프라고 하고 표현해 줄 수 있다.

예를 들어 다음 사진과 같이 두 집 단이 있다.
다음 그래프를 가장 효율적으로 매칭하는 경우는 두 집단이 최대로 매칭되는 경우다.
이분 탐색은 DFS(깊이 탐색)을 활용하여서 문제를 해결할 수 있다.
def bimatch(N):
if visited[N]:
return False
visited[N] = True
for g in graph[N]:
# 매칭이 안 된 정점이거나, 이미 매칭된 정점이 다른 정점으로 바꿀 수 있는 경우
if selected[g] == -1 or bimatch(selected[g]):
selected[g] = N
return True
return False
# A그룹 정점수, B그룹 정점수
n, m = map(int, input().split())
# A 정점에서 연결 가능한 B 정점 번호들
graph = [list(map(int, input().split())) for _ in range(n)]
# B 그룹과 매칭된 A 그룹 정점 번호
selected = [-1] * (m + 1)
for i in range(n):
visited = [False] * (n)
bimatch(i)
ans = 0
for i in range(1, m+1):
if selected[i] >= 0:
ans += 1
print(selected) # 연결 되었는지 확인
print(ans) # 최대 연결 갯수 출력
정말 잘 읽었습니다, 고맙습니다!