Cod sursa(job #2145929)

Utilizator Tyler_BMNIon Robert Gabriel Tyler_BMN Data 27 februarie 2018 18:15:44
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>
#include <vector>
#include <set>

using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");

const int MAXN = 50005;
const int INF = 0x3f3f3f3f;

vector< pair<int, int> > Graph[MAXN];

int n, m;
int dist[MAXN];

int main() {
	fin >> n >> m;

	for (int i = 0; i < m; ++i) {
		int from, to, cost;
		fin >> from >> to >> cost;
		Graph[from].push_back({ to, cost });
	}

	for (int i = 1; i <= n; i++) {
		dist[i] = INF;
	}
	dist[1] = 0;

	set<pair<int, int>> heap;
	heap.insert(make_pair(0, 1));
	while (!heap.empty()) {
		int node = heap.begin()->second;
		heap.erase(heap.begin());

		for (pair<int, int> edge : Graph[node]) {
			int to = edge.first;
			int cost = edge.second;

			if (dist[to] > dist[node] + cost) {
				if (dist[to] != INF) {
					heap.erase(heap.find({ dist[to], to }));
				}
				dist[to] = dist[node] + cost;
				heap.insert({ dist[to], to });
			}
		}
	}

	for (int i = 2; i <= n; ++i) {
		if (dist[i] == INF) {
			dist[i] = 0;
		}
		fout << dist[i] << ' ';
	}
	fout << '\n';
	return 0;
}