Cod sursa(job #1357623)

Utilizator cristian.enciuCristian Enciu cristian.enciu Data 24 februarie 2015 00:12:10
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include<stdio.h>
#include<vector>
#include<queue>
#include<string.h>

#define MAX_VAL 2000000000

using namespace std;

int n, m;
struct node {
	vector<int> next;
	vector<int> vals;
};
node nodes[50010];
int vals[50010];
queue<int> q;

int main()
{
	freopen("djkstra.in", "r", stdin);
	freopen("djkstra.out", "w", stdout);

	scanf("%d%d", &n, &m);
	for(int i = 0 ; i < m ; ++i) {
		int x, y, val;
		scanf("%d%d%d", &x, &y, &val);
		nodes[x].next.push_back(y);
		nodes[x].vals.push_back(val);
	}

	for(int i = 2 ; i < 50010 ; ++i) {
		vals[i] = MAX_VAL;
	}

	q.push(1);
	while(!q.empty()) {
		int c_node = q.front();
		q.pop();

		int size = nodes[c_node].next.size();
		for(int i = 0 ; i < size ; ++i) {
			if(vals[nodes[c_node].next[i]] > vals[c_node] + nodes[c_node].vals[i]) {
				vals[nodes[c_node].next[i]] = vals[c_node] + nodes[c_node].vals[i];
				q.push(nodes[c_node].next[i]);
			}
		}
	}

	for(int i = 2 ; i <= n ; ++i) {
		if(vals[i] == MAX_VAL) printf("0 ");
		else printf("%d ", vals[i]);
	}

	return 0;
}