Cod sursa(job #496421)

Utilizator vlad.maneaVlad Manea vlad.manea Data 28 octombrie 2010 21:55:42
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
// 

#include <fstream>
#include <queue>
#include <vector>
#include <limits>
using namespace std;

#define NMax 50001

int N, M;
vector< pair<int, int> > W[NMax];
vector<int> D;
queue<int> Q;

void read()
{
	int u, v, c;
	ifstream fin;
	fin.open("dijkstra.in", fstream::in);
	fin >> N >> M;
	while (M--)
	{
		fin >> u >> v >> c;
		W[u].push_back(pair<int, int>(v, c));
	}
	fin.close();
}

void solve()
{
	int u, v, c;
	for (int i = 0; i <= N; ++i)
		D.push_back(INT_MAX);
	Q.push(1);
	D[1] = 0;
	while (!Q.empty())
	{
		u = Q.front();
		Q.pop();
		for (vector< pair<int, int> >::iterator t = W[u].begin(); t != W[u].end(); ++t)
		{
			v = t->first;
			c = t->second;
			if (D[v] > D[u] + c)
			{
				D[v] = D[u] + c;
				Q.push(v);
			}
		}
	}
}

void write()
{
	ofstream fout("dijkstra.out");
	for (int i = 2; i <= N; ++i)
		fout << (D[i] == INT_MAX? 0: D[i]) << ' ';
	fout << '\n';
	fout.close();
}

int main()
{
	read();
	solve();
	write();
	return 0;
}