Cod sursa(job #591625)

Utilizator deneoAdrian Craciun deneo Data 24 mai 2011 21:42:47
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include<queue>
#include<cstdio>
#include<vector>
using namespace std;

#define INFINIT 0x3f3f3f3f

typedef vector<int> VI;

struct muchie {
	int c, t;
}a;

vector<muchie> c[50001];
int n, m, d[50001];

struct cmp {
	bool operator()(const int &a, const int &b) const{ 
		if(d[a] > d[b]) return 1;
		return 0;
	}
};



priority_queue<int, VI, cmp> heap;

void dijkstra(int sursa) {
	int k, i;
	memset(d, INFINIT, sizeof(d));
	d[sursa] = 0;
	heap.push(sursa);
	while( !heap.empty() ) {
		k = heap.top();
		heap.pop();
		for(i = 0; i < c[k].size(); ++i)
			if(d[c[k][i].t] > d[k] + c[k][i].c) {
				d[c[k][i].t] = d[k] + c[k][i].c;
				heap.push(c[k][i].t);
			}
	}
}

int main() {
	int i, m1, m2, cost;
	freopen("dijkstra.in", "r", stdin);
	freopen("dijkstra.out", "w", stdout);
	scanf("%d%d", &n, &m);
	while(m--) {
		scanf("%d%d%d", &m1, &m2, &cost);
		a.t = m2; a.c = cost;
		c[m1].push_back(a);
	}
	dijkstra(1);
	for(i = 2; i <= n; ++i) {
		if(d[i] == INFINIT)
			printf("0");
		else printf("%d", d[i]);
		if(i != n)
			printf(" ");
	}
	printf("\n");
	return 0;
}