Pagini recente » Cod sursa (job #1881160) | Cod sursa (job #504513) | Cod sursa (job #1182187) | Cod sursa (job #1917351) | Cod sursa (job #2154008)
#include <fstream>
#include <queue>
#include <vector>
using namespace std;
ifstream cin("dijkstra.in");
ofstream cout("dijkstra.out");
const int nmax = 50005;
const int inf = 1 << 30;
int n, m;
vector < int > D;
vector < bool > InCoada;
vector < pair < int, int > > A[nmax];
priority_queue < int, vector < int >, less<int>> Q;
bool dist(int a, int b) { return a<b;}
void Citire()
{
cin >> n >> m;
int x, y, c;
for(int i = 1; i <= m; i++) cin >> x >> y >> c, A[x].push_back({y,c});
}
void Dijkstra(int NS)
{
D.resize(n+1);
InCoada.assign(n+1,0);
for(int i = 1; i <= n; i++) D[i] = inf;
D[NS] = 0;
Q.push(NS);
InCoada[NS] = true;
while(!Q.empty())
{
int NC = Q.top();
Q.pop();
InCoada[NC] = false;
for(int i = 0; i < A[NC].size(); i++)
{
int Vecin = A[NC][i].first;
int Cost = A[NC][i].second;
if(D[NC] + Cost < D[Vecin])
{
D[Vecin] = D[NC] + Cost;
if(InCoada[Vecin] == false)
{
Q.push(Vecin);
InCoada[Vecin] = true;
}
}
}
}
}
void Afisare()
{
for(int i = 2; i <= n; ++ i)
{
if(D[i] != inf) cout << D[i] << ' ';
else cout << "0 ";
}
}
int main()
{
Citire();
Dijkstra(1);
Afisare();
}