문제 링크
- http://icpc.me/2544
문제 출처
- 2007 KOI 고등부 3번
사용 알고리즘
- 이분 매칭
시간복잡도
- $O(NM \sqrt {NM} \log 500\,000)$
풀이
가장 큰 수를 X 이하로 만들 수 있는지 판별해봅시다.
가장 큰 수를 X 이하로 만들기 위해서는 X보다 큰 모든 칸을 선택해서 제거해야 합니다.
각 행과 열을 정점으로 잡고, X보다 큰 칸에서 만나는 행과 열을 간선으로 이어준 이분 그래프를 생각해봅시다. 이분 그래프의 최소 정점 덮개를 구하면 되므로 이분 매칭을 해줄 수 있습니다. 최소 정점 덮개의 크기가 K 이하인지 판별해주면 됩니다.
파라메트릭 서치를 통해 정답이 되는 X를 구했다면, 정답을 역추적 해야합니다.
최소 정점 덮개를 역추적하면 K 이하인 집합이 나오긴 하겠지만, 정확히 K가 아닐 수 있습니다. 이런 경우에는 X를 포함하지 않는 행과 열을 적절히 추가해서 K개로 만들어주면 됩니다.
전체 코드
1 |
|