Cod sursa(job #3203024)

Utilizator laurentiu.maticaMatica Laurentiu-Andrei laurentiu.matica Data 12 februarie 2024 22:32:43
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
// #include <iostream>


#include <fstream>
#include <vector>
#include <queue>

using namespace std;

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

const int NMAX=500001;
const int MMAX = 2500001;
const int INF = 1000000001;
bool viz[NMAX];
int drum[NMAX];
auto cmp=[](pair<int, int> a, pair<int, int> b){ return a.first > b.first;};
priority_queue<pair<int, int>, vector<pair<int, int>>, decltype(cmp)>q(cmp);
vector<pair<int, int>>g[NMAX];
void dijkstra()
{
	drum[1] = 0;
	q.push({ 0,1 });
	while (!q.empty())
	{
		pair<int, int>p = q.top();
		q.pop();
		if (viz[p.second])
			continue;
		viz[p.second] = 1;
		for(auto x:g[p.second])
			if (!viz[x.second] && drum[x.second] > drum[p.second] + x.first)
			{
				drum[x.second] = drum[p.second] + x.first;
				q.push({ drum[x.second],x.second });
			}
	}
}
int main()
{
	int n, m;
	cin >> n >> m;
	for (int i = 0; i < m; i++)
	{
		int x, y, c;
		cin >> x >> y >> c;
		g[x].push_back({ c,y });
	}
	for (int i = 1; i <= n; i++)
		drum[i] = INF;
	dijkstra();
	for (int i = 2; i <= n; i++, cout << ' ')
		if (drum[i] == INF)
			cout << 0;
		else
			cout << drum[i];
	return 0;
}