Pagini recente » Cod sursa (job #1476319) | Cod sursa (job #2888654) | Cod sursa (job #360236) | Cod sursa (job #2164684) | Cod sursa (job #879041)
Cod sursa(job #879041)
#include<cstdio>
#include<vector>
using namespace std;
int m,n,d[50001],x,y,c,k,inf=100000000,Min;
bool sel[50001],ok=true;
vector <pair <int, int> > a[50001];
int main()
{
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
scanf("%d %d\n",&n,&m);
for(int i=2;i<=n;++i) d[i]=inf;
for(int i=0;i<m;++i)
{
scanf("%d %d %d\n",&x,&y,&c);
a[x].push_back(make_pair(y,c));
if(x==1) d[y]=c;
}
sel[1]=true;
while(ok)
{
Min=inf;
for(int i=1;i<=n;++i)
{
if(Min>d[i]&&!sel[i])
{
Min=d[i];
k=i;
}
}
if(Min==inf) ok=false;
else sel[k]=true;
for(int i=2;i<=n;++i)
if(!sel[i])
for(int j=0;j<a[k].size();++j)
if(a[k][j].first==i)
if(d[i]>d[k]+a[k][j].second) d[i]=d[k]+a[k][j].second;
}
for(int i=2;i<n;++i)
{
if(d[i]==inf) printf("0 ");
else printf("%d ",d[i]);
}
printf("%d\n",d[n]);
fclose(stdin); fclose(stdout);
return 0;
}