Hello COCOBALL!

C++ [BOJ] 백준 5972번 택배 배송 본문

BOJ

C++ [BOJ] 백준 5972번 택배 배송

coco_ball 2022. 7. 7. 17:51

https://www.acmicpc.net/problem/5972


SOLUTION

다익스트라 알고리즘으로 간단하게 풀 수 있는 문제


코드

#include <iostream>
#include <vector>
#include <queue>
#define MAX 50001
#define INF 1e9
using namespace std;

int n, m;
int dist[MAX + 1];
vector<pair<int, int>>v[MAX + 1];

void dijkstra(int start) {
	for (int i = 1; i <= n; i++) dist[i] = INF;
	priority_queue<pair<int, int>>pq;
	pq.push({ 0,start });
	dist[start] = 0;
	while (!pq.empty()) {
		int cost = -pq.top().first;
		int cur = pq.top().second;
		pq.pop();
		for (int i = 0; i < v[cur].size(); i++) {
			int next = v[cur][i].first;
			int newcost = v[cur][i].second + cost;
			if (dist[next] > newcost) {
				dist[next] = newcost;
				pq.push({ -dist[next],next });
			}
		}
	}
}

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);
	cin >> n >> m;
	while (m--) {
		int a, b, c;
		cin >> a >> b >> c;
		v[a].push_back({ b,c });
		v[b].push_back({ a,c });
	}
	dijkstra(1);
	cout << dist[n];
}