if(D[v_min]+간선(v_min,w)의 가중치<D[w]) //기존 가중치 보다 작다면
D[w] = D[v_min]+간선(v_min, w)의 가중치 // 업데이트
...
#include <iostream>
#include <vector>
#include <queue>
#define INF 200000001
#define MAX 100005
using namespace std;
typedef pair<int, int> pii;
vector<pii> nodes[MAX];
int dist[MAX];
void dijkstra(int s)
{
priority_queue<pii> pq;
dist[s] = 0;
pq.push({ 0,s });
while (!pq.empty())
{
int cost = -1*pq.top().first;
int cur = pq.top().second;
pq.pop();
//이미 최단 거리 정보가 있다면 pass
if (dist[cur] < cost) continue;
for (pii curNode : nodes[cur])
{
int viaCost = cost + curNode.first;
if (viaCost < dist[curNode.second])
{
dist[curNode.second] = viaCost; //거리갱신
pq.push({ -1*viaCost,curNode.second }); //탐색
}
}
}
}
int main()
{
ios::sync_with_stdio(false); cin.tie(NULL);
int N, M, S, E; cin >> N >> M >> S >> E;
for (int i = 0; i < MAX; i++) dist[i] = INF;
for (int i = 0; i < MAX; i++) nodes[i].clear();
for (int i = 0; i < M; i++)
{
int a, b, d; cin >> a >> b >> d;
nodes[a].push_back(make_pair(b, d));
nodes[b].push_back(make_pair(d, a));
}
dijkstra(S);
cout << dist[E];
return 0;
}