Cod sursa(job #707713)

Utilizator andrici_cezarAndrici Cezar andrici_cezar Data 5 martie 2012 22:29:46
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <cstdio>
#include <vector>
#include <queue>
#include <string.h>
#define maxn 50001
using namespace std;

struct nodulet {long d; long lg;} arc;

vector < nodulet > A[maxn];
queue < long > q;
long x, i, N, K, elc, C[maxn], G[maxn];
bool viz[maxn];

int main() {
	freopen("dijkstra.in","r",stdin);
	freopen("dijkstra.out","w",stdout);
	
		scanf("%ld %ld", &N, &K);
		
		for (i = 0; i < K; ++i) {
			scanf("%ld %ld %ld", &x, &arc.d, &arc.lg);
			A[x].push_back(arc);
		}
		
		for (i = 1; i <= N; ++i) {
			G[i] = A[i].size();
		}
		for (i = 2; i <= N; ++i)
			C[i] = 250000002;
		C[1] = 0;
		q.push(1);
		
		for (; !q.empty(); q.pop()) {
			elc = q.front();
			
			for (i = 0; i < G[elc]; ++i) {
				if ( C[elc] + A[elc][i].lg < C[A[elc][i].d] ) {
					C[ A[elc][i].d ] = C[elc] + A[elc][i].lg;
					q.push(A[elc][i].d);
				}
			}
		}
		
		for (i = 2; i <= N; ++i) {
			if (C[i] == 250*1000*1000+2)
				printf("0 ");
			else
			printf("%ld ", C[i]);
		}
		printf("\n");
	
	return 0;
}