Cod sursa(job #2947417)

Utilizator RaduAntoneoAntonio Alexandru Radu RaduAntoneo Data 26 noiembrie 2022 02:02:55
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <bits/stdc++.h>
using namespace std;

ifstream f ("dijkstra.in");
ifstream g ("dijkstra.out");
#define cin f
#define cout g

priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> heap;
vector<vector<pair<int, int>>> adj;
vector<int> dist;

void dijkstra(int start) {
	dist[start] = 0;
	heap.push({0, start});

	while (!heap.empty()) {
		int cost = heap.top().first;
		int node = heap.top().second;
		heap.pop();

		for (auto p : adj[node]) {
			int v_cost = p.first;
			int v_node = p.second;
			
			if (dist[v_node] > dist[node] + v_cost) {
				dist[v_node] = dist[node] + v_cost;
				heap.push({dist[v_node], v_node});
			}
		}
	}
}

int main() {
	int n, m;
	cin >> n >> m;

	adj.resize(n+1);
	dist.resize(n+1, INT_MAX);

	for (int i = 0; i < m; i++) {
		int u, v, w;
		cin >> u >> v >> w;
		adj[u].push_back({w, v});
		adj[v].push_back({w, u});
	}

	dijkstra(1);
	
	for (int i = 2; i <= n; i++) 
		cout << dist[i] << ' ';
	return 0;
}