Mai intai trebuie sa te autentifici.
Cod sursa(job #2801176)
Utilizator | Data | 15 noiembrie 2021 12:03:47 | |
---|---|---|---|
Problema | Algoritmul lui Dijkstra | Scor | 100 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 1.09 kb |
#include <bits/stdc++.h>
using namespace std;
ifstream fi("dijkstra.in");
ofstream fo("dijkstra.out");
const int NMAX = 50005;
const int INF = 1e9 + 5;
int n, m;
vector <pair<int, int>> G[NMAX];
int dist[NMAX];
void dijkstra() {
for (int i = 1; i <= n; i++)
dist[i] = INF;
priority_queue <pair<int, int>> Q;
Q.push({0, 1});
dist[1] = 0;
while (!Q.empty()) {
int nod = Q.top().second;
if (-Q.top().first != dist[nod]) {
Q.pop(); continue;
}
Q.pop();
for (auto v: G[nod])
if (dist[nod] + v.second < dist[v.first]) {
dist[v.first] = dist[nod] + v.second;
Q.push({-dist[v.first], v.first});
}
}
}
int main()
{
fi >> n >> m;
for (int i = 1; i <= m; i++) {
int u, v, c; fi >> u >> v >> c;
G[u].push_back({v, c});
}
dijkstra();
for (int i = 2; i <= n; i++)
if (dist[i] != INF)
fo << dist[i] << " ";
else
fo << 0 << " ";
return 0;
}