Pagini recente » Cod sursa (job #1595533) | Cod sursa (job #1010556) | Cod sursa (job #1685080) | Cod sursa (job #2890003) | Cod sursa (job #2425559)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
vector <vector <pair <int, int> > > v(50001);
void dijkstra(int s, int n) {
vector <int> d(n + 1, 0x3f3f3f3f);
priority_queue <pair <int, int>, vector <pair <int, int> >, greater <pair <int, int> > > Q;
d[s] = 0;
Q.push({0, s});
while (!Q.empty) {
auto curent = Q.top();
int cdist = curent.first;
int cnod = curent.second;
Q.pop();
if (d[cnod] != cdist)
continue;
for (auto el : v[cnod]) {
int ndist = el.first;
int nnod = el.second;
if (d[nnod] > ndist + cdist) {
d[nnod] = ndist + cdist;
Q.push({d[nnod], nnod});
}
}
}
for (unsigned i = 2; i < d.size(); i++)
if (d[i] == 0x3f3f3f3f)
out << 0 << ' ';
else
out << d[i] << ' ';
}
int main() {
int n, m;
int a, b, c;
in >> n >> m;
for (int i = 0; i < m; i++) {
in >> a >> b >> c;
v[a].push_back({c, b});
v[b].push_back({c, a});
}
dijkstra(1, n);
return 0;
}