Cod sursa(job #382375)

Utilizator mottyMatei-Dan Epure motty Data 13 ianuarie 2010 16:28:38
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include<cstdio>
#include<deque>
#include<vector>
using namespace std;

const int N=50001,M=1000002,INF=1000000000;

int s[N],n,m,q[M],f=1,l=1,c[N];

struct xy{
	int to,c;
};

vector <xy> v[N];

void read()
{
	int x;
	xy rd;
	scanf("%d%d",&n,&m);
	for( int i=1 ; i<=m ; ++i )
	{
		scanf("%d%d%d",&x,&rd.to,&rd.c);
		v[x].push_back(rd);
		++s[x];
	}
}

void act()
{
	for( int i=2 ; i<=n ; ++i )
		c[i]=INF;
}

void use( int x )
{
	for( int i=0 ; i<s[x] ; ++i )
		if( c[ v[x][i].to ] > c[x] + v[x][i].c )
		{
			c[ v[x][i].to ] = c[x] + v[x][i].c;
			q[++l]=v[x][i].to;
		}
}

void bf()
{
	q[1]=1;
	while(f<=l)
	{
		use(q[f]);
		++f;
	}
}

void afis()
{
	for( int i=2 ; i<=n ; ++i )
		if(c[i]==INF)
			printf("0 ");
		else
			printf("%d ",c[i]);
}

int main()
{
	freopen("dijkstra.in","r",stdin);
	freopen("dijkstra.out","w",stdout);
	read();
	act();
	bf();
	afis();
	return 0;
}