문제 링크
- http://icpc.me/1960
사용 알고리즘
- 네트워크 플로우
- 최대 유량
풀이
왼쪽에는 각 행을 대표하는 정점을 두고, 오른쪽에는 각 열을 대표하는 정점을 둡니다.
그리고 소스(S)는 왼쪽 정점과, 싱크(T)는 오른쪽 정점과 연결해줍니다. 각 간선의 capacity는 행/열의 합으로 잡아줍니다.
그런 다음 행을 대표하는 정점들과 열을 대표하는 정점들이 모두 연결되어있는 완전 그래프를 만들어주고, 이때 간선의 capacity는 1로 해줍니다.
위 사진처럼 만든 그래프에서 max flow를 흘려준 뒤, i행과 j열을 잇는 간선에 유량이 흐르고 있다면 (i, j)칸에 1을 넣어주면 됩니다.
전체 코드
1 |
|