Cod sursa(job #2743551)

Utilizator teofilotopeniTeofil teofilotopeni Data 23 aprilie 2021 11:06:49
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <bits/stdc++.h>
using namespace std;
#define elem pair<int, int>

int main() {
	freopen("dijkstra.in", "r", stdin);
	freopen("dijkstra.out", "w", stdout);
	int n, m;
	scanf("%d %d", &n, &m);
	vector<vector<elem>> nodes(n + 1);
	while (m--) {
		int x, y, lg;
		scanf("%d %d %d", &x, &y, &lg);
		nodes[x].push_back(elem(lg, y));
	}

	vector<int> minim(nodes.size(), INT_MAX);
	set<elem> coada;
	coada.insert(elem(0, 1));
	while (coada.size()) {
		elem from = *(coada.begin());
		coada.erase(coada.begin());
		if (minim[from.second] <= from.first)
			continue;
		minim[from.second] = from.first;
		for (elem act : nodes[from.second])
			coada.insert(elem(act.first + from.first, act.second));
	}
	for (int i = 2; i < minim.size(); i++)
		printf("%d ", minim[i] == INT_MAX ? 0 : minim[i]);
	return 0;
}