Pagini recente » Istoria paginii runda/infolimpiada | Cod sursa (job #1118146) | Cod sursa (job #616009) | Cod sursa (job #427816) | Cod sursa (job #705036)
Cod sursa(job #705036)
#include<stdio.h>
#include<vector>
using namespace std;
int n,m,i,j,d[200002],x,y,z,c[200002],ok[200002],nr,pos;
vector <int>cost[200002],a[200002];
void dijkstra();
int main()
{
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
scanf("%d %d",&n,&m);
for(;m;m--)
{
scanf("%d %d %d",&x,&y,&z);
a[x].push_back(y);
cost[x].push_back(z);
}
dijkstra();
for(i=2;i<=n;i++)
printf("%d ",d[i]);
return 0;
}
void dijkstra()
{
int min;
min=2000000000;
for(i=2;i<=n;i++)
d[i]=min;
d[1]=0;
for(i=1;i<=n;i++)
{
min=2000000000;
for(j=1;j<=n;j++)
if(!ok[j]&&d[j]<min)
{
min=d[j];
pos=j;
}
ok[pos]=1;
nr=a[pos].size();
for(j=0;j<nr;j++)
if(d[pos]+cost[pos][j]<d[a[pos][j]])
d[a[pos][j]]=d[pos]+cost[pos][j];
}
}