티스토리 뷰
문제 링크 : https://www.acmicpc.net/problem/1854
1854번: K번째 최단경로 찾기
첫째 줄에 n, m, k가 주어진다. (1 ≤ n ≤ 1000, 0 ≤ m ≤ 2000000, 1 ≤ k ≤ 100) n과 m은 각각 김 조교가 여행을 고려하고 있는 도시들의 개수와, 도시 간에 존재하는 도로의 수이다. 이어지는 m개의 줄에
www.acmicpc.net
다익스트라 알고리즘을 사용할 때,
priority queue 에서 pop 된 지점은 최단 경로임이 보장되므로
일반적으로는 그 지점을 재차 방문할 이유가 없다.
이 문제에서는 k 번째 최단경로를 요구하므로 이미 최단거리가 확보가 된 지점도 다시 방문할 필요가 생겼다.
각 지점에 진입할 때까지의 거리를 다시 기록해 두고 기록한 거리 정보가 k 개를 넘어 섰을 때부터 제거하면 된다.
각 지점에서 k 개의 값을 다시 priority queue 에 저장하면 알아서 값들의 크기를 정렬해 준다.
보통의 경우라면 초기에 거리를 큰 값으로 초기화하고 개선해서 저장한다.
그리고 저장된 값이 이후 새로이 계산된 값보다 작으면 추가적인 진입을 cut off 하게 된다.
하지만 앞서 말한 바와 같이 최단 거리로 cut off 하면 안되니 이 경우에는 Dst 는 초기화하지 않는다.
어차피 k 개까지는 계속 값을 받아들일 것이고 더 이상 갱신될 것이 없을 때까지 계속 정점들을 방문할 것이다.
반응형
'DS\Algo' 카테고리의 다른 글
BOJ 2407 조합 (C++) (0) | 2022.09.20 |
---|---|
BOJ 2338 긴자리 계산 (C++) (0) | 2022.09.18 |
BOJ 10830 행렬 제곱 (0) | 2022.09.16 |
BOJ 11495 격자 0 만들기 (2) | 2022.09.15 |
BOJ 2565 전깃줄 (0) | 2022.09.12 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- RUBY
- Aho-Corasick
- dynamic programming
- Vim
- 다익스트라
- 세그먼트 트리
- lazy propagation
- Shell Programming
- Reference
- bash
- number theory
- C++ big number
- shell
- 백준
- Dijkstra
- math font
- python3
- javascript array
- segment tree
- BOJ
- stack
- map
- 정수론
- persistent segment tree
- bash script
- fenwick tree
- JavaScript
- nearest common ancestor
- max flow
- script
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
글 보관함