Cod sursa(job #185750)

Utilizator slayer4uVictor Popescu slayer4u Data 25 aprilie 2008 23:36:39
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <stdio.h>
#include <set>
#include <vector>
using namespace std;

vector <pair <long, long> > g[50001];
set <pair <long, long> > thingy;

long n, m, i, a, b, c, nod, cost_, cost[50001];

int main()
{
	freopen ("dijkstra.in", "rt", stdin);
	freopen ("dijkstra.out", "wt", stdout);

	scanf("%ld %ld", &n, &m);
	for (i = 1; i <= m; ++i)
	{
		scanf("%ld %ld %ld", &a, &b, &c);
		g[a].push_back(make_pair(b, c));
		g[b].push_back(make_pair(a, c));
	}

	for (i = 1; i <= n; ++i)
		cost[i] = 2147000000;

	thingy.insert(make_pair(0, 1));
	cost[1] = 0;

	while (!thingy.empty())
	{
		set <pair <long, long> >::iterator it;
		it = thingy.begin();

		nod = it -> second;
		cost_ = it -> first;

		for (vector <pair <long, long> >::iterator it = g[nod].begin(); it < g[nod].end(); ++it)
		{
			if (cost[nod] + (*it).second < cost[(*it).first])
			{
				cost[(*it).first] = cost[nod] + (*it).second;
				thingy.insert(make_pair((*it).second, (*it).first));
			}
		}

		thingy.erase(it);
	}	

	for (i = 2; i <= n; ++i)
		printf("%ld ", cost[i]);
	printf("\n");

	return 0;
}