Cod sursa(job #317430)
using namespace std;
#include<stdio.h>
#include<vector>
const int lmax=250000005;
int d[50005],n,m;
vector<int> a[50005];
vector<int> p[50005];
bool sel[50005];
void citire()
{
int i,x,y,c;
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
scanf("%d%d\n", &n, &m);
for(i=1;i<=n;++i)
{
d[i]=lmax;
sel[i]=false;
}
d[1]=0;
for(i=1;i<=m;++i)
{
scanf("%d%d%d\n", &x,&y,&c);
a[x].push_back(y);
p[x].push_back(c);
}
}
int minim()
{
int min=lmax,pmin=lmax,i;
for(i=1;i<=n;++i)
if(!sel[i] && d[i]<min)
{
min=d[i];
pmin=i;
}
return pmin;
}
void update(int x)
{
for(int i=0;i<a[x].size();++i)
if(d[x]+p[x][i]<d[a[x][i]])
d[a[x][i]]=d[x]+p[x][i];
}
void calcul()
{
int x;
for(int i=1;i<n;++i)
{
x=minim();
update(x);
}
}
void af()
{
for(int i=1;i<=n;++i)
printf("%d ", d[i]);
}
int main()
{
citire();
calcul();
af();
return 0;
}