Cod sursa(job #496432)

Utilizator vlad.maneaVlad Manea vlad.manea Data 28 octombrie 2010 23:01:00
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb

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

#define NMax 50001

int N, M;
vector< pair<int, int> > W[NMax];
vector<int> D;
set< pair<int, int> > H;

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);
	D[1] = 0;
	H.insert(pair<int, int>(0, 1));
	while(!H.empty())
	{
		u = H.begin()->second;
		H.erase(*H.begin());
		for (vector< pair<int, int> >::iterator i = W[u].begin(); i != W[u].end(); ++i)
		{
			v = i->first;
			c = i->second;
			if (D[v] > D[u] + c)
			{
				D[v] = D[u] + c;
				H.insert(pair<int, int>(D[v], 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;
}