# 3650. Minimum Cost Path with Edge Reversals ## 演算法 ```= 建構有向圖,其中反向邊的權重是 2 * w 使用 Dijkstra's algorithm 找出 0 到 n - 1 的最短路徑 ``` ## 程式碼 ```cpp= #define oo 1e9 class Solution { public: int minCost(int n, vector<vector<int>>& edges) { vector<vector<pair<int,int>>> adj(n); for (int i = 0; i < edges.size(); i++) { int u = edges[i][0], v = edges[i][1], w = edges[i][2]; adj[u].push_back({v, w}); adj[v].push_back({u, 2 * w}); } priority_queue<pair<int,int>, vector<pair<int,int>>, greater<pair<int,int>>> pq; vector<int> dis(n, oo); vector<bool> done(n); dis[0] = 0; pq.push({0, 0}); while (!pq.empty()) { auto [step, u] = pq.top(); pq.pop(); if (done[u]) continue; done[u] = 1; for (auto [v, w] : adj[u]) { if (dis[v] > step + w) { dis[v] = step + w; pq.push({dis[v], v}); } } } return dis[n - 1] == oo ? -1 : dis[n - 1]; } }; ```