반응형
https://www.acmicpc.net/problem/11779
11779번: 최소비용 구하기 2
첫째 줄에 도시의 개수 n(1≤n≤1,000)이 주어지고 둘째 줄에는 버스의 개수 m(1≤m≤100,000)이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스
www.acmicpc.net
#include <bits/stdc++.h>
using namespace std;
int n, m, st, en;
pair<int, int> dist[1001]; //거리 , 이전노드 저장
vector<pair<int, int> > v[1001];
struct Node {
int x, ex ,d;
bool operator<(const Node& b)const {
return d > b.d;
}
};
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
memset(dist, 0x3f, sizeof(dist));
cin >> n >> m;
for (int i = 0; i < m; i++) {
int a, b, c;
cin >> a >> b >> c;
v[a].push_back({ b, c });
}
cin >> st >> en;
priority_queue<Node> Q;
Q.push({ st,-1,0 });
vector<int> ans;
while (!Q.empty()) {
int x = Q.top().x;
int ex = Q.top().ex;
int d = Q.top().d;
Q.pop();
if (dist[x].first <= d) continue;
dist[x].first = d;
dist[x].second = ex;
if (x == en) {
int a = en;
while (a != -1) {
ans.push_back(a);
a = dist[a].second;
}
cout << d << '\n';
cout << ans.size() << '\n';
for (int i = ans.size() - 1; i >= 0; i--) {
cout << ans[i] << ' ';
}
return 0;
}
for (int i = 0; i < v[x].size(); i++) {
int nx = v[x][i].first;
int nd = d + v[x][i].second;
if (dist[nx].first > nd) {
Q.push({ nx,x,nd });
}
}
}
return 0;
}
반응형
'Algorithm > problem' 카테고리의 다른 글
백준 2108번: 통계학 C++ (0) | 2022.02.16 |
---|---|
백준 9370번 : 미확인 도착지 - 다익스트라 (0) | 2022.02.15 |
백준 1916번: 최소비용 구하기 - 다익스트라 C++ (0) | 2022.02.15 |
백준 10800 : 컬러볼 누적합, 투포인터 활용 C++ (0) | 2022.02.14 |
백준 10166번: 관중석 문제풀이코드 C++ (0) | 2022.02.13 |