문제 링크
- https://icpc.me/21639
사용 알고리즘
- 일반 그래프 매칭
시간복잡도
- $O((\sum A_i)^3)$
풀이
매번 정확히 2개의 음식을 요리할 때, 최소 시간으로 $i$번째 음식을 $A_i$번 만들어야 합니다.
$i$번째 음식을 나타내는 정점을 $A_i$개 만든 뒤, $i$번째 음식과 $j$번째 음식을 비용이 $C(i, j)$인 간선으로 연결한 그래프를 생각해 봅시다. 이 그래프에서 가중치가 최소인 완전 매칭을 찾는다면, 그 매칭의 가중치가 정답이 될 것 입니다.
정점이 $V$개인 그래프의 최대/최소 가중치 매칭은 $O(V^3)$에 구할 수 있으므로 문제를 $O((\sum A_i)^3)$ 시간에 해결할 수 있습니다.
제가 갖고 있는 라이브러리는 최대 가중치 매칭만 구할 수 있기 때문에, 적당히 큰 값에서 원래 가중치를 뺀 그래프에서 최대 가중치 매칭을 구했습니다.
전체 코드
1 |
|