문제 링크
- http://icpc.me/18253
문제 출처
- Good Bye, BOJ 2019 G번
사용 알고리즘
- 분할정복
- 다익스트라
시간복잡도
- $O(N^2M log (NM) log M)$
풀이
M에 비해 N이 매우 작다는 점에서 풀이가 시작합니다.
$L$번째 열부터 $R$번째 열 안에 있는 쿼리들의 답을 구한다고 합시다.
만약 쿼리의 시작점과 끝점이 중앙에 있는 $M = \lfloor \frac {L+R}{2} \rfloor$번째 열을 기준으로 서로 반대쪽에 있다면 최단 경로는 항상 $M$번째 열을 지나게 됩니다.
$M$번째 열에는 $N(N ≤ 5)$개의 격자가 있으므로, N번 다익스트라를 돌려주면 $M$번째 열을 지나는 모든 최단 경로를 처리해줄 수 있습니다.
최단 경로가 $M$번째 열을 지나지 않는 경우에는 쿼리의 시작점과 끝점이 한 곳에 몰려있다는 것을 의미하므로, $[L, M-1]$과 $[M+1, R]$ 구간에 대해 각각 분할 정복을 해주면 됩니다.
전체 코드
1 |
|