문제 출처: https://www.acmicpc.net/problem/2051
문제 분석
이전에 1867번 문제에서 쾨닉의 정리를 본 적이 있다. 이 정리의 증명은 직접 minimum vertex cover를 구하기에 이를 참고했다.
풀이
이분 그래프를 \(G=(V, E)\) 라 하고 좌, 우를 각각 \(L, R\) 이라고 하자. 그리고 \(L\) 에서 unmatched인 정점이거나 그 정점으로부터 alternating path(후술) 를 이루는 정점들의 집합을 \(Z\) 라고 할 때, minimum vertex cover 집합 \(K\) 는 다음와 같다. \(K=(L\setminus Z) \cup (R \cap Z)\) 따라서 \(Z\) 를 구해주면 되겠다.
*Alternating path : 아래 그림처럼 Unmatched 정점에서 시작하여 match에 이용된 간선, 이용되지 않은 간선을 번갈아가며 방문하는 길이다.
Unmatched bipartite graph
Random initial matching M (red)
An alternating path (red & green)
코드
1 |
|