Pagini recente » Cod sursa (job #2122989) | Profil Gheorghe_Paul_325CA | Cod sursa (job #2269812) | Cod sursa (job #2052853) | Cod sursa (job #1460928)
#include <cstdio>
#include <vector>
#include <set>
#define Dim 50001
#define INF 1000000
using namespace std;
int n,m,d[Dim];
vector< pair<int,int> > G[Dim];
set < pair <int,int> > S;
void dijkstra()
{
for(int i = 2; i <= n; i++)
d[i] = INF;
S.insert(make_pair(0,1));
while(!S.empty())
{
int Dist = (*S.begin()).first;
int 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));
}
dijkstra();
for(int i = 2; i <= n; i++)
{
printf("%d ",d[i] == INF ? 0 : d[i]);
}
return 0;
}