Cod sursa(job #3231100)

Utilizator ClassicalClassical Classical Data 24 mai 2024 19:31:49
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <bits/stdc++.h>

using namespace std;

const int N = 50000 + 7;
const int INF = (int) 1e9 + 7;
int n, m, dist[N];
vector<pair<int, int>> g[N];

int main() {
#ifdef INFOARENA
	freopen ("dijkstra.in", "r", stdin);
	freopen ("dijkstra.out", "w", stdout);
#endif

	cin >> n >> m;
	for (int i = 1; i <= m; i++) {
		int a, b, c;
		cin >> a >> b >> c;
		g[a].push_back({b, c});
	}
	for (int i = 1; i <= n; i++) {
		dist[i] = INF;
	}
	dist[1] = 0;
	priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
	pq.push({dist[1], 1});
	while (!pq.empty()) {
		auto it = pq.top();
		int a = it.second;
		pq.pop();
		if (it.first != dist[a]) {
			continue;
		}
		for (auto &ite : g[a]) {
			int b = ite.first, c = ite.second;
			int nw = dist[a] + c;
			if (nw < dist[b]) {
				dist[b] = nw;
				pq.push({dist[b], b});
			}
		}
	}
	for (int i = 2; i <= n; i++) {
		if (dist[i] == INF) {
			dist[i] = 0;
		}
		cout << dist[i] << " ";
	}
	cout << "\n";
	return 0;
}