Pagini recente » Cod sursa (job #2348684) | Cod sursa (job #1905670) | Cod sursa (job #2915282) | Cod sursa (job #3138854) | Cod sursa (job #1512011)
#include <cstdio>
#include <fstream>
#include <vector>
#include <set>
#include <queue>
#define Nmax 50005
#define inf 1<<30
#define inFile "dijkstra.in"
#define outFile "dijkstra.out"
using namespace std;
queue < pair <int, int> > T;
vector <int> G[Nmax],C[Nmax];
int dist[Nmax],n,m;
void Dijkstra(int start)
{
int i,nod,val,ls;
for(i=1;i<=n;i++)
dist[i] = inf;
dist[start] = 0;
T.push( make_pair(0,start) );
while(T.size() > 0)
{
val = (T.front()).first;
nod = (T.front()).second;
T.pop();
ls = G[nod].size();
for(i=0;i < ls;i++)
if(dist[G[nod][i]] > val + C[nod][i])
{
dist[G[nod][i]] = val + C[nod][i];
T.push( make_pair(dist[G[nod][i]],G[nod][i]) );
}
}
}
int main()
{
int i,a,b,c;
freopen(inFile,"r",stdin);
freopen(outFile,"w",stdout);
scanf("%d%d",&n,&m);
for(i=0;i<m;i++)
{
scanf("%d%d%d",&a,&b,&c);
G[a].push_back(b);
C[a].push_back(c);
}
Dijkstra(1);
for(i=2;i<=n;i++)
{
if(dist[i] == inf)
printf("0 ");
else
printf("%d ",dist[i]);
}
}