Pagini recente » Cod sursa (job #2401029) | Cod sursa (job #1360972) | Cod sursa (job #1542644) | Cod sursa (job #1179533) | Cod sursa (job #2482433)
#include <fstream>
#include <vector>
#include <queue>
#include <tuple>
using namespace std;
using VI = vector<int>;
using PI = pair<int, int>;
using VPI = vector<PI>;
using VVPI = vector<VPI>;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
const int inf = 0x3f3f3f3f;
VVPI G;
VI D;
int n, m;
void Citire();
void Dijkstra(int);
void Afisare();
int main()
{
Citire();
Dijkstra(1);
Afisare();
}
void Citire()
{
in >> n >> m;
G = VVPI(n + 1);
for (int i = 1; i <= m; ++i)
{
int x, y, w;
in >> x >> y >> w;
G[x].emplace_back(w, y);
}
}
void Dijkstra(int sursa)
{
D = VI(n + 1, inf);
priority_queue<PI, VPI, greater<PI>> Q;
D[sursa] = 0;
Q.push({D[sursa], sursa});
while (!Q.empty())
{
int x, dist_x;
tie(dist_x, x) = Q.top();
Q.pop();
if (dist_x > D[x])
continue;
for (auto& p : G[x])
{
int y, dist_y;
tie(dist_y, y) = p;
if (D[y] > D[x] + dist_y)
{
D[y] = D[x] + dist_y;
Q.push({D[y], y});
}
}
}
}
void Afisare()
{
for (int i = 2; i <= n; ++i)
out << (D[i] == inf ? 0 : D[i]) << ' ';
}