Cod sursa(job #393085)

Utilizator nautilusCohal Alexandru nautilus Data 8 februarie 2010 20:56:05
Problema Algoritmul lui Dijkstra Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include<fstream>
#include<stdio.h>
#include<vector>

#define dmax 50001
#define inf 999999

using namespace std;

int n,m,inc,sfc,d[dmax],q[500000],uz[dmax];

vector<int> a[dmax];
vector<int> cost[dmax];
/*vector<int> q;*/

int main()
{
 int i,j,x,y,c,elem;
	
 /*ifstream fin("dijkstra.in");*/ 
 freopen("dijkstra.in","r",stdin);
 /*fin>>n>>m;*/
 scanf("%d %d",&n, &m);
 for (i=1; i<=m; i++)
	 {
	  /*fin>>x>>y>>c;*/
	  scanf("%d %d %d",&x, &y, &c);
	  a[x].push_back(y);
	  cost[x].push_back(c);
	 }
 
 inc=0; sfc=1;
 /*q.push_back(1); q.push_back(1);*/
 q[1]=1;
 
 for (i=2; i<=n; i++)
	 d[i]=inf;
  
 while (inc<=sfc)
	 {
	  inc++; elem=q[inc];
	  
	  for (i=0; i<a[elem].size(); i++)
			  if (d[a[elem][i]] > d[elem] + cost[elem][i])
				 {
				  d[a[elem][i]]= d[elem] + cost[elem][i];
				  sfc++; 
				  /*q.push_back(a[elem][i]);*/
				  q[sfc]=a[elem][i];
				 }
	 }
 
 /*ofstream fout("dijkstra.out");*/
 freopen("dijkstra.out","w",stdout);
 
 for (i=2; i<=n; i++)
	 if (d[i]!=inf)
		 /*fout<<d[i]<<" ";*/
		 printf("%d ",d[i]); else
		 printf("0 ");
	
 return 0;
}