Pagini recente » Cod sursa (job #1482120) | Cod sursa (job #1643826) | Cod sursa (job #1031311) | Cod sursa (job #570001) | Cod sursa (job #2566658)
#include <bits/stdc++.h>
#define NMax 50006
#define oo (1 << 30)
using namespace std;
ifstream fin ("dijkstra.in");
ofstream fout ("dijkstra.out");
vector <pair <int, int> > L[NMax];
priority_queue <pair <int, int> > Q;
int n, m, drum[NMax], viz[NMax];
void Read ()
{
int x, y, z;
fin >> n >> m;
for (int i = 1; i <= m; i++)
{
fin >> x >> y >> z;
L[x].push_back ({y, z});
}
}
void Initializare ()
{
for (int i = 1; i <= n; i++)
drum[i] = oo;
}
void Dijkstra ()
{
int nod, cost, i;
Initializare();
drum[1] = 0;
Q.push({0, 1});
while (!Q.empty())
{
i = Q.top().second;
Q.pop();
if (!viz[i])
{
viz[i] = 1;
for (int j = 0; j < L[i].size(); j++)
{
nod = L[i][j].first;
cost = L[i][j].second;
if (drum[nod] > drum[i] + cost)
{
drum[nod] = drum[i] + cost;
Q.push ({-drum[nod], nod});
}
}
}
}
}
void Afisare ()
{
for (int i = 2; i <= n; i++)
if (drum[i] == oo)
fout << "0 ";
else
fout << drum[i] << " ";
fout << "\n";
}
int main()
{
Read();
Dijkstra();
Afisare();
return 0;
}