Cod sursa(job #721601)

Utilizator valiro21Valentin Rosca valiro21 Data 23 martie 2012 20:39:25
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <cstdio>
#include <vector>
#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;
vector< pair<int,int> > li[NMax];

void dijkstra() {
	q.push(1);
	while(!q.empty()) {
		now=q.front();
		for(long it=0; it<li[now].size();it++) {
			if(lg[now] + li[now][it].val < lg[li[now][it].nod] || lg[li[now][it].nod]==0) {
				lg[li[now][it].nod]=lg[now] + li[now][it].val; 
				q.push(li[now][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;
}