Cod sursa(job #2171599)

Utilizator tonisnakesBoar Antonio tonisnakes Data 15 martie 2018 12:51:52
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <bitset>
#define NMAX 50005
#define inf 0x3f3f3f3f
using namespace std;

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

struct Nod {
	int nr, dist;
	Nod (int x, int y) {
		nr = x;
		dist = y;
	}
	bool operator<(const Nod &altu) const{
		return dist > altu.dist;	
	}
};

vector <pair<int, int> > G[NMAX];
bitset <NMAX> verif;
priority_queue <Nod> pq;
int n, m, dist[NMAX];

int main ()
{
	fin >> n >> m;
	for (int i = 1; i <= m; ++i) {
		int x, y, z;
		fin >> x >> y >> z;
		G[x].push_back(make_pair(y,z));
	}
	for (int i = 2; i <= n; ++i) {
		dist[i] = inf;
	}
	pq.push(Nod(1,0));
	while (!pq.empty()) {
		Nod nod = pq.top();
		pq.pop();
		if (verif[nod.nr]) {
			continue;	
		}
		verif[nod.nr] = 1;
		for (int i = 0; i < G[nod.nr].size(); ++i) {
			if (!verif[G[nod.nr][i].first]) {
				Nod nou = Nod(G[nod.nr][i].first, G[nod.nr][i].second);
				nou.dist += nod.dist;
				if (nou.dist < dist[nou.nr]) {
					dist[nou.nr] = nou.dist;
					pq.push(nou);
				}
			}
		}
	}
	for (int i = 2; i <= n; ++i) {
		if (dist[i] == inf) {
			fout << 0 << " ";	
		}
		else {
			fout << dist[i] << " ";	
		}
	}
	
	return 0;	
}