classSolution { public: intfindCheapestPrice(int n, vector<vector<int>>& flights, int src, int dst, int k){ vector<vector<pii>> adj(n); // adjacent list for (constauto& f : flights) { adj[f[0]].emplace_back(pii{f[2], f[1]}); }
classSolution { public: intfindCheapestPrice(int n, vector<vector<int>>& flights, int src, int dst, int k){ vector<int> dist(n, INT_MAX); dist[src] = 0;
for (int i = 0; i <= k; ++i) { vector<int> prev = dist; // prev 初始化為不超過 (i - 1) 個中繼點的狀態
for (constauto& f : flights) { constint u = f[0], v = f[1], price = f[2];
// 若 u 無法直接抵達, 則跳過 // 若不處理, 下面 prev[u] + price 會 overflow if (prev[u] == INT_MAX) { continue; }
// u 可直接抵達, 則更新 u -> v 的 shortest path dist[v] = min(dist[v], prev[u] + price); } } // 此時的 dist 為不超過 k 個中繼點的狀態 return (dist[dst] == INT_MAX) ? -1 : dist[dst]; } };