Cod sursa(job #2281667)

Utilizator flibiaVisanu Cristian flibia Data 12 noiembrie 2018 17:14:19
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#pragma GCC optimize("03")
#include <bits/stdc++.h>
#define ll long long 
#define fi first
#define se second

using namespace std;

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

int n, m, k, from[300100], x, y;
ll dp[300100], c;
vector <pair <int, ll> > v[300100];
set <pair <ll, int> > s;

int main() {
	//ifstream cin("tst.in");
	//ofstream out("tst.out");
	ios_base::sync_with_stdio(0);
	in.tie(NULL);
	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++)
		dp[i] = LLONG_MAX;
	dp[1] = 0;
	s.insert({0, 1});
	while (s.size() > 0) {
		auto nod = *s.begin();
		s.erase(s.begin());
		for (auto i : v[nod.se]) {
			if (nod.fi + i.fi < dp[i.se]) {
				if (dp[i.se] != LLONG_MAX) 
					s.erase(s.find({dp[i.se], i.se}));
				dp[i.se] = nod.fi + i.fi;
				s.insert({dp[i.se], i.se});
			}
		}		
	}
	for (int i = 2; i <= n; i++)
		out << (dp[i] != LLONG_MAX ? dp[i] : 0) << ' ';
	return 0;
}