Cod sursa(job #488246)

Utilizator antoanelaAntoanela Siminiuc antoanela Data 27 septembrie 2010 23:12:01
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <cstdio>
#include <vector>
#include <set>
using namespace std;
#define nmax 50010
#define inf 1<<30
#define f first
#define s second

vector <pair <int, int> > g[nmax];
set <pair <int, int> > t;
int n, m, d[nmax];

void solve()
{
	int i, val, x;
	for (i=1; i<=n; i++) d[i]=inf;
	t.insert(make_pair(0,1));
	while (t.size()>0)
	{
		val=(*t.begin()).first;
		x=(*t.begin()).second;
		t.erase(*t.begin());
		for (i=0; i<g[x].size(); i++)
			if (val+g[x][i].s<d[g[x][i].f])
			{
				d[g[x][i].f]=val+g[x][i].s;
				t.insert(make_pair(d[g[x][i].f], g[x][i].f));
			}
	}
}

int main()
{
	freopen("dijkstra.in","r",stdin);
	freopen("dijkstra.out","w",stdout);
	scanf("%d %d",&n,&m);
	int i, x, y, c;
	while (m--)
	{
		scanf("%d %d %d",&x,&y,&c);
		g[x].push_back (make_pair(y,c));
	}
	solve();
	for (i=2; i<=n; i++)
		if (d[i]==inf) printf("0 "); else 
			printf("%d ",d[i]);
	
}