Problem#
有 $n$ 座城市由 flights[i] = [fromi, toi, pricei]
個班機來往,給你起始點src
和結束點dst
以及整數 k
(代表最多停留 k
個城市),問你最便宜要花多少錢,如果沒有這種路徑則回傳 -1
。
- 測資限制:
- $1 \le n \le 100$
- $0 \le flights.length \le (n * (n - 1) / 2)$
想法#
dijkstra 但不儲存 distance 改儲存 depth (路徑長度),也因為每次都挑最小的費用的 node 所以當 current node = dst 時會是最小費。
- 時間複雜度: $\mathcal{O}(EK\log{EK})$
- 每個 edge 要處理 k 次,每次 push/pop heap $\mathcal{O}(n\log{n})$
- 空間複雜度: $\mathcal{O}(N+EK)$
- $\mathcal{O}(EK)$ : pq 數量
AC Code#
賞析#
TODO: BFS, bellman ford
心得#
一開始我沒想到是要多維護路徑長 (k) 看解答才想到QQ