Pagini recente » Cod sursa (job #3291022) | Cod sursa (job #3171100) | Cod sursa (job #3214704) | Cod sursa (job #2252288) | Cod sursa (job #1789195)
#include <stdio.h>
#include <vector>
#include <set>
#define maxdim 50005
using namespace std;
int n, m;
int dist[maxdim];
vector<pair<int, int>> G[maxdim];
set<pair<int, int>> S;
int main() {
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
scanf("%d %d", &n, &m);
for (int i = 1; i <= m; ++i) {
int x, y, c; scanf("%d %d %d", &x, &y, &c);
G[x].push_back(make_pair(y, c));
}
for (int i = 2; i <= n; ++i) {
dist[i] = 1 << 30;
}
S.insert(make_pair(1, dist[1]));
while (!S.empty()) {
auto p = *(S.begin());
int nod = p.first, cost = p.second;
S.erase(S.begin());
if (cost != dist[nod]) {
continue;
}
for (auto &v : G[nod]) {
if (dist[v.first] > dist[nod] + v.second) {
dist[v.first] = dist[nod] + v.second;
S.insert(make_pair(v.first, dist[v.first]));
}
}
}
for (int i = 2; i <= n; ++i) {
if (dist[i] == (1 << 30)) {
dist[i] = 0;
}
printf("%d ", dist[i]);
}
printf("\n");
return 0;
}