Problem Solving/BOJ [백준 11779번] [Dijkstra] 최소비용 구하기 2 - 728x90 반응형 Approach 다익스트라를 돌리되, parent 배열을 따로 잡아줘서 역추적해주면 된다. Code #include <bits/stdc++.h> #define fastio cin.tie(0)->sync_with_stdio(0) using namespace std; typedef long long ll; typedef pair<int, int> pii; int move_x[4] = {-1, 1, 0, 0}; int move_y[4] = {0, 0, -1, 1}; const int INF = 200000000; int main() { fastio; int n, m; cin >> n >> m; vector<pii> edge[n]; for(int i = 0; i < m; i++){ int a, b, c; cin >> a >> b >> c; edge[a - 1].push_back({b - 1, c}); } int s, e; cin >> s >> e; s--, e--; vector<int> dist(n, INF); vector<int> parent(n, -1); dist[s] = 0; priority_queue<pii, vector<pii>, greater<pii> > pq; pq.push({0, s}); while(!pq.empty()){ int cur_cost = pq.top().first, cur = pq.top().second; pq.pop(); if(dist[cur] < cur_cost) continue; for(auto &p : edge[cur]){ int to = p.first, cost = p.second; if(cur_cost + cost < dist[to]){ dist[to] = cur_cost + cost; parent[to] = cur; pq.push({dist[to], to}); } } } cout << dist[e] << "\n"; stack<int> result; int cur = e; result.push(cur); while(cur != s){ cur = parent[cur]; result.push(cur); } cout << result.size() << "\n"; while(!result.empty()){ cout << result.top() + 1 << " "; result.pop(); } cout << "\n"; return 0; } 반응형 공유하기 URL 복사카카오톡 공유페이스북 공유엑스 공유 게시글 관리 구독하기비룡의 컴퓨터이야기 Contents Approach Code 당신이 좋아할만한 콘텐츠 [백준 11438번] [LCA] LCA 2 2022.01.29 [백준 14938번] [Dijkstra] 서강그라운드 2022.01.15 [백준 10217번] [Dijkstra / DP] KCM Travel 2022.01.15 [백준 1182번] [Bruteforce / 비트마스킹] 부분수열의 합 2022.01.15 댓글 0 + 이전 댓글 더보기