Cod sursa(job #1906001)

Utilizator virtualityBbbbbbbbbbbbbbbbbb virtuality Data 6 martie 2017 12:00:03
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include<bits/stdc++.h>
#define N 50020
using namespace std;
typedef long long LL;
vector <pair<int,int> > lda[N];
int v[N];
priority_queue<pair<int, int> > q;
int main(){
	int n, m, e[N];
	int x, y, d;
	freopen("dijkstra.in", "r", stdin);
	freopen("dijkstra.out", "w", stdout);
	scanf("%d%d", &n, &m);
	while(m--){
		scanf("%d%d%d", &x, &y, &d);
		lda[x].push_back(make_pair(y, d));
		lda[y].push_back(make_pair(x, d));
	}
	for(int i=1;i<=n;i++)e[i]=1e6;
	e[1]=0;
	q.push(make_pair(0,1));
	while(!q.empty()){
		int a=q.top().second; 
		q.pop();
		if(v[a]) continue;
		v[a]=1;
		int l=lda[a].size();
		for(int i=0;i<l;i++){
			int nod=lda[a][i].first;
			if(e[nod] > e[a]+lda[a][i].second) {
				e[nod]=e[a]+lda[a][i].second;
				q.push(make_pair(-e[nod], nod));
			}
		}
	}
	for(int i=2;i<=n;i++)printf("%d ", e[i]);
	return 0;
}