Cod sursa(job #2268884)

Utilizator marcudanfDaniel Marcu marcudanf Data 25 octombrie 2018 14:33:54
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <iostream>
#include <fstream>
#include <vector>

const int NMAX = 5e4 + 5;
const int inf = 1<<29;

using namespace std;

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

vector < pair <int, int > > g[NMAX];

int viz[NMAX], d[NMAX];

int n, m;

void dijkstra(int nod){
	d[nod] = 0;
	for(int k = 0; k < n; k++){
		int Min = inf;
		for(int i = 1; i <= n; i++)
			if(!viz[i] and d[i] < Min){
				Min = d[i];
				nod = i;
			}
		viz[nod] = 1;
		for(auto i : g[nod])
			d[i.first] = min(d[i.first], d[nod] + i.second);
	}
}

int main(){
	fin >> n >> m;
	while(m--){
		int a, b, c;
		fin >> a >> b >> c;
		g[a].push_back({b, c});
	}
	fin.close();
	for(int i = 0; i <= n; i++)
		d[i] = inf;
	dijkstra(1);
	for(int i = 2; i <= n; i++)
		if(d[i] == inf)
			fout << "0 ";
		else
			fout << d[i] << ' ';
	fout << '\n';
	fout.close();
	return 0;
}