Cod sursa(job #381884)

Utilizator arnold23Arnold Tempfli arnold23 Data 11 ianuarie 2010 21:56:32
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <stdio.h>
#include <vector>
#include <queue>
#define size 50100;
#define max 2000000000;

using namespace std;

struct adat{
	long x,t;
	};

long i,j,n,m,u,p;
adat a;
vector< adat > v[size];
vector< long > dist;

struct comp{
    bool operator()(long x, long y) { return dist[x]>dist[y]; }
	};

int main()
{
 freopen("dijkstra.in","r",stdin);
 freopen("dijkstra.out","w",stdout);
 
 scanf("%ld %ld",&n,&m);
 for(i=1;i<=n;++i){
	 for(j=1;j<=m;++j){
		scanf("%ld %ld %ld",&p,&a.x,&a.t);
		v[p].push_back(a);
	 }
	 scanf("\n");
 }
	
 priority_queue<long, vector<long>, comp> heap;
 
 for(i=1;i<=n;++i) dist[i]=max;
 heap.push(1);
 dist[1]=0;
 while(!heap.empty()){
	u=heap.top();
	heap.pop();
	for(i=0;i<=v[u].size();++i){
	  if(dist[v[u][i].x]>dist[u]+v[u][i].t){
		 dist[v[u][i].x]=dist[u]+v[u][i].t;
		 heap.push(v[u][i].x); 
		  }	
	} 
	 
 }	
	
 for(i=2;i<=n;++i){
	 if(dist[i]==max) printf("%c ","0") else
	 printf("%ld ",dist[i]);
	 }	

 return 0;

}