Cod sursa(job #721459)

Utilizator valiro21Valentin Rosca valiro21 Data 23 martie 2012 18:36:11
Problema Algoritmul lui Dijkstra Scor 0
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;
}