문제 링크
- https://icpc.me/21086
사용 알고리즘
- Edmond’s blossom algorithm
- 2-SAT
시간복잡도
- $O(N^3)$
풀이
최대 매칭의 크기를 $M$, 최소 정점 덮개의 크기를 $C$라고 합시다. $M \leq C$인 것은 자명하기 때문에 $C = M$인 경우와 $C = M+1$인 경우로 나눠서 생각하면 됩니다. 일단 Edmond’s blossom algorithm을 이용해 $O(N^3)$ 시간에 최대 매칭을 구합시다.
만약 $C=M$이라면 각 매칭의 끝점 중 정확히 한 정점이 정점 덮개에 포함되어야 합니다. 또한 정점 덮개의 조건을 만족하기 위해서 각 간선의 끝점 중 하나 이상이 정점 덮개에 포함되어야 합니다. 두 조건 모두 2-SAT으로 모델링할 수 있으므로 $O(N^2)$ 시간에 판별할 수 있습니다.
이제 $C=M+1$인 경우를 생각해 봅시다. 매칭마다 정점을 하나씩 선택한 다음 추가로 하나를 더 선택해야 합니다. 구체적으로, 매칭에 포함되지 않은 정점을 선택하거나, 한 매칭의 양쪽 끝점을 모두 선택해야 합니다.
매칭에 포함되지 않은 정점을 선택하는 것은 $N-2M$가지의 경우를 확인하면 되고, 한 매칭의 양쪽 끝점을 모두 선택하는 것은 $M$가지 경우를 확인하면 됩니다. 두 케이스 모두 2-SAT으로 모델링할 수 있으므로 $O(N^3)$ 시간에 판별할 수 있습니다.
따라서 전체 문제를 $O(N^3)$ 시간에 해결할 수 있습니다.
전체 코드
1 |
|