Pagini recente » Cod sursa (job #1355907) | Cod sursa (job #1320972) | Cod sursa (job #2573951) | Cod sursa (job #233833) | Cod sursa (job #1448516)
#include <bits/stdc++.h>
#include <stdio.h>
using namespace std;
#define Dim 50001
#define INF 1000000
int N,M,D[Dim];
vector< pair<int,int> > G[Dim];
set < pair<int,int> > S;
void Shortest_Path()
{
for (int i = 2;i <= N;i++)
D[i] = INF;
S.insert(make_pair(0,1));
while (!S.empty())
{
int Dist = (*S.begin()).first , Ind = (*S.begin()).second;
S.erase(*S.begin());
for (int i = 0;i < G[Ind].size();i++)
if (D[G[Ind][i].first] > Dist + G[Ind][i].second)
D[G[Ind][i].first] = Dist + G[Ind][i].second,
S.insert(make_pair(D[G[Ind][i].first],G[Ind][i].first));
}
}
int main()
{
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
scanf("%d%d",&N,&M);
int A,B,C;
for (int i = 1;i <= M;i++)
scanf("%d%d%d",&A,&B,&C),
G[A].push_back(make_pair(B,C));
Shortest_Path();
for (int i = 2;i <= N;i++)
printf("%d ",D[i] == INF ? 0 : D[i]);
return 0;
}