Cod sursa(job #420785)

Utilizator NemultumituMatei Ionita Nemultumitu Data 20 martie 2010 15:58:59
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <cstdio>
#include <vector>
using namespace std;
vector < pair <int,int> > a[50009];
int n,m,v[500009],cost[50009];
bool ma[50009];

void bfs()
{
	int r=1,p;
	v[1]=1;
	for (int p=1;p<=r;ma[v[p]]=false,++p)
		for (int i=0;i<a[v[p]].size();++i)
			if (!cost[a[v[p]][i].first]||cost[a[v[p]][i].first]>cost[v[p]]+a[v[p]][i].second)
			{
				cost[a[v[p]][i].first]=cost[v[p]]+a[v[p]][i].second;
				if (!ma[a[v[p]][i].first])
				{
					ma[a[v[p]][i].first]=1;
					v[++r]=a[v[p]][i].first;
				}
			}
}

int main()
{
	freopen ("dijkstra.in","r",stdin);
	freopen ("dijkstra.out","w",stdout);
	scanf("%d%d",&n,&m);
	int x,y,z;
	for (int i=1;i<=m;++i)
	{
		scanf("%d%d%d",&x,&y,&z);
		a[x].push_back(make_pair(y,z));
	}
	bfs();
	for (int i=2;i<=n;++i)
		printf("%d ",cost[i]);
	printf("\n");
	return 0;
}