Pagini recente » Cod sursa (job #675372) | Cod sursa (job #781233) | Cod sursa (job #1504241) | Cod sursa (job #1378095) | Cod sursa (job #3323528)
#include <fstream>
#include <vector>
#include <queue>
#include <limits>
using namespace std;
const int INF = numeric_limits<int>::max();
int main() {
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int N, M;
fin >> N >> M;
vector<vector<pair<int, int>>> L(N + 1);
vector<int> d(N + 1, INF);
vector<bool> vis(N + 1, false);
for (int i = 0; i < M; i++) {
int A, B, C;
fin >> A >> B >> C;
L[A].push_back({ B, C });
}
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> PQ;
d[1] = 0;
PQ.push({ d[1], 1 });
while (!PQ.empty()) {
int nod = PQ.top().second;
PQ.pop();
if (vis[nod]) continue;
vis[nod] = true;
for (auto x : L[nod]) {
int vecin = x.first;
int cost = x.second;
if (d[vecin] > d[nod] + cost) {
d[vecin] = d[nod] + cost;
PQ.push({ d[vecin], vecin });
}
}
}
for (int i = 2; i <= N; i++) {
if (d[i] == INF) fout << 0 << " ";
else fout << d[i] << " ";
}
return 0;
}