문제 링크
- http://icpc.me/11409
사용 알고리즘
- MCMF
- Network Flow
시간복잡도
- O(VEf)
풀이
MCMF는 Min Cost Max Flow, 즉 비용을 최소화 시키는 알고리즘입니다. 비용을 최대화 시키기 위해서는 비용에 -1을 곱해주면 됩니다.
당연하게도 최단 경로(최소 비용)은 음의 사이클이 없어야만 유한한 값이 나옵니다.
다행히도, 원래 그래프에는 음의 사이클이 없어도 플로우 진행 도중 나오는 역방향 간선 때문에 음의 사이클이 생길까 걱정하지 않으셔도 됩니다.
- 여기서 a가 최단 경로에 포함되었다고 하면, b > a가 성립합니다.
- 가중치와 방향을 모두 뒤집으면 -a로 바뀌게 됩니다.
- 만약 방향을 뒤집은 뒤에 음의 사이클이 생긴다면 b-a < 0, 즉 b < a가 되기 때문에 모순입니다.
전체 코드
1 |
|