Cod sursa(job #145460)

Utilizator bogdan2412Bogdan-Cristian Tataroiu bogdan2412 Data 28 februarie 2008 20:40:23
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <cstdio>
#include <queue>
#include <vector>

using namespace std;

#define MAXN 50005

int N, d[MAXN];

vector< pair<int, int> > con[MAXN];
queue<int> Q;

char in[MAXN];

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

	int M;
	scanf("%d %d", &N, &M);
	for (; M; M--)
	{
		int x, y, cst;
		scanf("%d %d %d", &x, &y, &cst);

		con[x].push_back( make_pair(y, cst) );
	}

	memset( d, 0x3f, sizeof(d) );
	d[1] = 0; Q.push(1);
	for (; !Q.empty(); Q.pop())
	{
		int i = Q.front();

		vector< pair<int, int> > :: iterator it;
		for (it = con[i].begin(); it != con[i].end(); it++)
			if (d[i] + (*it).second < d[(*it).first])
			{
				d[ (*it).first ] = d[i] + (*it).second;
				if (!in[ (*it).first ])
					Q.push( (*it).first ),
					in[ (*it).first ] = 1;
			}

		in[i] = 0;
	}

	for (int i = 2; i <= N; i++)
		printf("%d ", d[i]);
	printf("\n");

	return 0;
}