Cod sursa(job #2457787)

Utilizator stefzahZaharia Stefan Tudor stefzah Data 18 septembrie 2019 18:49:04
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define inf 1e9
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int N, M, d[50005];
bool viz[50005];
vector <pair<int, int>>v[50005];
priority_queue<pair<int, int>>P;
void Relaxare(int nod)
{
	//cout << "AAA\n";
	viz[nod] = 1;
	for (int i = 0; i < v[nod].size(); i++)
	{
		if (v[nod][i].first + d[nod] > d[v[nod][i].second]) {P.push(make_pair(v[nod][i].first + d[nod], v[nod][i].second));
															 d[v[nod][i].second] = v[nod][i].first + d[nod];
															}
	}
}
int main()
{
	int x, y, z, N, M;
	fin >> N >> M;
	for (int i = 0; i < M; i++)
	{
		fin >> x >> y >> z;
		v[x].push_back(make_pair(-z, y));
	}

	P.push(make_pair(0, 1));
	for (int i = 2; i <= N; i++)
	{
		d[i] = -inf;
		P.push(make_pair(-inf, i));
	}
	while (!P.empty())
	{
		//cout << P.top().second<<"\n";
		if (viz[P.top().second] == 0)
			Relaxare(P.top().second);
		else P.pop();
	}
	for (int i = 2; i <= N; i++)
	{
		if (d[i] != -inf)fout << -d[i] << " ";
		else fout << "0 ";
	}
}