다익스트라 개념을 물어보는 문제이다. 우선순위 큐를 사용하여 선형 탐색보다 더 빠르게 구할 수 있도록 하였다. 우선순위 큐는 기본적으로 내림차순으로 정렬되기 때문에 cost
를 음수화하여 오름차순으로 정렬되도록 해주었다. 다익스트라 개념에 대해 잘 알아두자.
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#define INF 987654321
using namespace std;
int N, M;
vector<pair<int, int>> v[1001];
int d[1001];
int s, e;
void dijkstra() {
d[s] = 0;
priority_queue<pair<int, int>> pq;
pq.push({ s,0 });
while (!pq.empty()) {
int cur = pq.top().first;
int cost = -pq.top().second;
pq.pop();
if (d[cur] < cost) continue;
for (int i = 0; i < v[cur].size(); i++) {
int next = v[cur][i].first;
int nd = cost + v[cur][i].second;
if (nd < d[next]) {
d[next] = nd;
pq.push({ next,-nd });
}
}
}
}
void solution() {
for (int i = 1; i <= N; i++) {
d[i] = INF;
}
dijkstra();
cout << d[e];
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
cin >> N;
cin >> M;
for (int i = 0; i < M; i++) {
int a, b, c;
cin >> a >> b >> c;
v[a].push_back({ b,c });
}
cin >> s >> e;
solution();
return 0;
}