Pagini recente » Cod sursa (job #2597156) | Cod sursa (job #1238925) | Cod sursa (job #1443497) | Cod sursa (job #2296274) | Cod sursa (job #1195206)
#include <cstdio>
#define infinite 1<<30
using namespace std;
FILE *f=fopen("dijkstra.in","r");
FILE *g=fopen("dijkstra.out","w");
int n,m,viz[50001],d[50001],t[50001],x[3][250001],nr,st[50001];
inline void creeaza(int a,int b,int cost)
{nr++;
x[0][nr]=b;
x[2][nr]=cost;
x[1][nr]=st[a];
st[a]=nr;
}
inline int minim()
{int i,mini=infinite,k;
for (i=1;i<=n;i++)
if (!viz[i]&&d[i]<mini) mini=d[i],k=i;
return k;
}
inline void dijsktra()
{int i,j,k;
for (i=1;i<=n;i++)
{k=minim();
viz[k]=1;
j=st[k];
while (j!=0) {if (d[k]+x[2][j]<d[x[0][j]]) {d[x[0][j]]=d[k]+x[2][j];
t[x[0][j]]=k;}
j=x[1][j];
}
}
}
int main()
{int i,x,y,cost;
fscanf(f,"%d %d",&n,&m);
for (i=1;i<=m;i++) {fscanf(f,"%d %d %d",&x,&y,&cost);
creeaza(x,y,cost);
}
for (i=2;i<=n;i++) d[i]=infinite;
dijsktra();
for (i=2;i<=n;i++) if (d[i]!=infinite) fprintf(g,"%d ",d[i]);
else fprintf(g,"0 ");
return 0;
}