Pagini recente » Cod sursa (job #2291285) | Monitorul de evaluare | Cod sursa (job #1140419) | Cod sursa (job #896979) | Cod sursa (job #1323489)
#include <stdio.h>
#include <vector>
std::vector<int> *arr,*cost;
int sol[50001];
bool fol[50001];
int n,m;
int minim(int a,int b)
{
if(a>b) return b;
return a;
}
int main()
{
freopen ("dijkstra.in","r",stdin);
freopen ("dijkstra.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=2;i<=n;i++) sol[i]=1000000000;
arr=new std::vector<int> [n+1];
cost=new std::vector<int> [n+1];
int p1,p2,c;
for(int i=0;i<m;i++)
{
scanf("%d%d%d",&p1,&p2,&c);
arr[p1].push_back(p2);
cost[p1].push_back(c);
}
fol[1]=1;
int minpos=1,min;
for(int i=3;i<=n;i++)
{
int len=arr[minpos].size();
for(int j=0;j<len;j++)
{
if(fol[arr[minpos][j]]==0) sol[arr[minpos][j]]=minim(sol[arr[minpos][j]],sol[minpos]+cost[minpos][j]);
}
min=100000000;
for(int j=1;j<=n;j++)
{
if(fol[j]==0)
{
if(min>sol[j])
{
min=sol[j];
minpos=j;
}
}
}
fol[minpos]=1;
}
for(int i=2;i<=n;i++) printf("%d ",sol[i]);
}