Cod sursa(job #721461)

Utilizator valiro21Valentin Rosca valiro21 Data 23 martie 2012 18:37:30
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <cstdio>
#include <list>
#include <queue>
#define nod first
#define val second
#define NMax 50001 

using namespace std;

int n,m,lg[NMax],vall,x,y,now;
queue<int> q;
list< pair<int,int> > li[NMax];

void dijkstra() {
	q.push(1);
	while(!q.empty()) {
		now=q.front();
		for(list< pair <int,int> >::iterator it=li[now].begin();it!=li[now].end();it++) {
			if(lg[now] + it->val < lg[it->nod] || lg[it->nod]==0) {
				lg[it->nod]=lg[now] + it->val; 
				q.push(it->nod);
			}
		}
		q.pop();
	}
}

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

	scanf("%ld %ld",&n,&m);

	for(int i=1;i<=m;i++) {
		scanf("%ld %ld %ld",&x,&y,&vall);
		li[x].push_back(make_pair(y,vall));
	}

	dijkstra();

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

	return 0;
}