Cod sursa(job #220017)

Utilizator gicagica popescu gica Data 9 noiembrie 2008 11:36:15
Problema Algoritmul lui Dijkstra Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <cstdio>
#include <set>
#include <vector>
using namespace std;

#define fiu vec[nod][i]

const int MAX_N = 50010;
const int INF = 0x3f3f3f3f;

int n, m;
int f[MAX_N];
set < pair <int, int> > a;
vector <int> vec[MAX_N], cost[MAX_N];

int main()
{
	int i, x, y, c;
	freopen("dijkstra.in", "r", stdin);
	freopen("dijkstra.out", "w", stdout);
	
	scanf("%d %d", &n, &m);
	for (i = 0; i < m; ++i)
	{
		scanf("%d %d %d", &x, &y, &c);
		vec[x].push_back(y);
		cost[x].push_back(c);
	}

	memset(f, INF, sizeof(int) * (n + 2));
	f[1] = 0;

	a.insert(make_pair(0, 1));

	while (!a.empty())
	{
		int nod = (*a.begin()).second;
		a.erase(a.begin());

		for (i = 0; i < vec[nod].size(); ++i)
			if (f[fiu] > f[nod] + cost[nod][i])
			{
				f[fiu] = f[nod] + cost[nod][i];
				a.insert(make_pair(f[fiu], fiu));
			}
	}

	for (i = 2; i <= n; ++i) printf("%d ", (f[i] == INF) ? 0 : f[i]); 
}