Cod sursa(job #1061991)

Utilizator danny794Dan Danaila danny794 Data 20 decembrie 2013 16:32:30
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <cstdio>
#include <vector>
#include <queue>

#define MAXN 50005
const int inf = 1 << 30;

using namespace std;

queue<int> q;
vector< pair<int, int> > dist[MAXN];
int d[MAXN];

int N, M;

void inline read() {
	freopen("dijkstra.in","r", stdin);
	freopen("dijkstra.out","w", stdout);
	scanf("%d %d", &N, &M);
	int to, from, cost;
	for(int i = 1; i <= M; i++) {
		scanf("%d %d %d", &from, &to, &cost);
		dist[from].push_back(make_pair(to, cost));
	}
}

void dijkstra() {
	q.push(1);

	d[1] = 0;
	for(int i = 2; i <= N; i++)
		d[i] = inf;

	while(!q.empty()) {
		int node = q.front();
		q.pop();
		for(vector< pair<int, int> >::iterator p = dist[node].begin(); p != dist[node].end(); ++p){
			if (d[node] + p -> second < d[p -> first]){
				d[p -> first] = d[node] + p -> second;
				q.push(p -> first);
			}
		}
	}
}

void inline print() {
	for(int i = 2; i <= N; i++)
		printf("%d ", d[i] == inf ? 0 : d[i]);
}

int main(){
	read();
	dijkstra();
	print();
	return 0;
}