Pagini recente » Cod sursa (job #2168024) | Cod sursa (job #345560) | Cod sursa (job #425307) | Cod sursa (job #160380) | Cod sursa (job #2963284)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
const int mx = 2000000005;
int n, m, st = 1;
int d[100005]; bool w[100005];
vector<pair<int, int>> v[100005];
int edge(int a, int b) {
for (int i=0;i<v[a].size();i++) {
if (v[a][i].first == b)
return v[a][i].second;
}
return 0;
}
int main() {
fin >> n >> m;
for (int i=1;i<=m;i++) {
int x, y, z;
fin >> x >> y >> z;
v[x].push_back({y, z});
}
for (int i=1;i<=n;i++)
d[i] = mx;
// Dijkstra
priority_queue<pair<int, int>, vector<pair<int, int>>, function<bool(pair<int, int>, pair<int, int>)> >
q([](pair<int, int> a, pair<int, int> b) -> bool {
return a.first > b.first;
});
d[st] = 0;
q.push({0, st});
while (!q.empty()) {
int x = q.top().second, dx = q.top().first;
q.pop();
if (w[x])
continue;
/*cout << x << ": ";
for (int i=1;i<=n;i++)
cout << (d[i] == mx ? -1 : d[i]) << " ";
cout << "\n";*/
w[x] = true;
for (int i=0;i<v[x].size();i++) {
int cost = d[x] + edge(x, v[x][i].first);
if (!w[v[x][i].first] && cost < d[v[x][i].first]) {
d[v[x][i].first] = cost;
q.push({cost, v[x][i].first});
}
}
}
for (int i=2;i<=n;i++)
fout << (d[i] == mx ? 0 : d[i]) << " ";
return 0;
}