Cod sursa(job #2274750)

Utilizator cezar.plescaCezar Plesca cezar.plesca Data 2 noiembrie 2018 14:16:51
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include<stdio.h>
#include<stdlib.h>

#include <algorithm>
#include<vector>
#include<set>

using namespace std;

#define INF 1000000000

int M,N;

vector<pair<int,int>> L[50000];
bool S[50000]; 
int D[50000];

set<pair<int,int>> Q;

void dijkstra(){
	for(int i=1;i<N;i++)
		D[i]=INF; 
	D[0]=0; 
	
	Q.insert(make_pair(D[0],0));

	int u;
	set<pair<int,int>>::iterator itset;
	vector<pair<int,int>>::iterator itvec; 

	while(!Q.empty()){
		itset = Q.begin();
		u=(*itset).second;	
		S[u]=true;

		Q.erase(itset);

		int cost,vecin;

		for (itvec = L[u].begin(); itvec != L[u].end(); ++itvec) {
			vecin=(*itvec).first;
			cost=(*itvec).second;
			
			if(S[vecin]==false && (D[u] + cost) < D[vecin]){
				D[vecin]=D[u]+cost;
				Q.insert(make_pair(D[vecin],vecin));
			}
		}
	}		
}

int main(){
	
	freopen("dijkstra.in","rt",stdin);
	freopen("dijkstra.out","wt",stdout);
	
	scanf("%d %d",&N,&M);

	int x,y,cost;

	for(int i=0;i<M;i++){
		scanf("%d %d %d",&x,&y,&cost);
		L[x-1].push_back(make_pair(y-1,cost));	
	}

	dijkstra();

	for(int i=1;i<N;i++){
		if(D[i]==INF)
			printf("0 ");
		else
			printf("%d ",D[i]);
	}

	return 0;
}