Cod sursa(job #727141)

Utilizator vlad.doruIon Vlad-Doru vlad.doru Data 27 martie 2012 19:23:27
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <fstream>
#include <queue>
#include <vector>
#define mp make_pair
#define pb push_back

using namespace std;

const int N=50100;
const int INF=1<<30;

ifstream in("dijkstra.in");
ofstream out("dijkstra.out");

bool viz[N];
vector < pair<int,int> > muchii[N];
priority_queue < pair<int,int> > coada;
int cost[N];
int n,m;

void read(){
	int x,y,c,i;
	in>>n>>m;
	for(i=1;i<=m;++i){
		in>>x>>y>>c;
		muchii[x].pb(mp(c,y));
		muchii[y].pb(mp(c,x));
	}
	for(i=2;i<=n;++i)
		cost[i]=INF;
}

void solve(){
	int i,aux,costaux;
	pair <int,int> auxp;
	coada.push(mp(0,1));
	while(coada.empty()==false){
		auxp=coada.top();
		aux=auxp.second;
		costaux=auxp.first;
		cost[aux]=costaux;
		coada.pop();
		if(viz[aux])
			continue;
		viz[aux]=true;
		for(i=0;i<muchii[aux].size();++i){
			if(costaux+muchii[aux][i].first<cost[muchii[aux][i].second]){
				cost[muchii[aux][i].second]=costaux+muchii[aux][i].first;
				coada.push(mp(cost[muchii[aux][i].second],muchii[aux][i].second));
			}
		}
	}		
	for(i=2;i<=n;++i){
		out<<cost[i]<<" ";
	}
}

int main(){
	read();
	solve();
	return 0;
}