Pagini recente » Cod sursa (job #3265958) | Cod sursa (job #676984) | Cod sursa (job #148244) | Cod sursa (job #1274477) | Cod sursa (job #1453921)
#include <iostream>
#include <limits.h>
#include <cmath>
#include <string>
#include <stdio.h>
#include <algorithm>
#include <stdlib.h>
#include <vector>
#include <stack>
#include <map>
#include <fstream>
#include <list>
#include <queue>
#include <iomanip>
#include <deque>
#include <set>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
#define cin f
#define cout g
#define mm 50001
#define inf (1<<30)
#define pb push_back
#define mp make_pair
#define node first
#define cost second
set < pair<int,int> > q;
vector < pair<int, int> > v[mm];
int dist[mm];
void Init(int noduri)
{
for(int i = 2; i<=noduri; i++)
dist[i] = inf;
}
void Dijkstra(int nod)
{
dist[nod] = 0;
q.insert(mp(nod,dist[nod]));
while(!q.empty())
{
int sursa = q.begin() -> first;
int cost_sursa = q.begin() -> second;
q.erase(q.begin());
for(auto i: v[sursa])
if ( cost_sursa + i.cost < dist[i.node])
{
dist[i.node] = cost_sursa + i.cost;
q.insert(mp(i.node, dist[i.node]));
}
}
}
void Afisare(int noduri)
{
for(int i = 2; i<=noduri; i++)
if (dist[i] != inf)
cout<<dist[i]<<" ";
else
cout<<0<<" ";
}
int main()
{
int n, m;
cin >> n >> m;
for(int i = 1; i<=m; i++)
{
int x, y, z;
cin >> x >> y >> z;
v[x].pb(mp(y,z));
}
Init(n);
Dijkstra(1);
Afisare(n);
return 0;
}