Cod sursa(job #2425255)

Utilizator flibiaVisanu Cristian flibia Data 24 mai 2019 17:32:51
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <bits/stdc++.h>

using namespace std;

ifstream in("dijkstra.in");
ofstream out("dijkstra.out");

int n, m, x, y, c, d[50100];
vector<pair<int, int> > v[50100];
set<pair<int, int> > h;

int main() {
	in >> n >> m;
	for (int i = 1; i <= m; i++) {
		in >> x >> y >> c;
		v[x].push_back({c, y});
		v[y].push_back({c, x});
	}
	
	for (int i = 1; i <= n; i++)
		d[i] = 2e9;
	
	d[1] = 0;
	h.insert({0, 1});
	while (!h.empty()) {
		auto w = *h.begin();
		h.erase(h.begin());
		
		for (auto it : v[w.second]) {
			int dist = d[w.second] + it.first;
			if (dist < d[it.second]) {
				if (d[it.second] != 2e9)
					h.erase(h.find({d[it.second], it.second}));
				
				d[it.second] = dist;
				h.insert({dist, it.second});
			}
		}
	}
	
	for (int i = 2; i <= n; i++)
		out << (d[i] == 2e9 ? 0 : d[i]) << ' ';
	return 0;
}