Pagini recente » Cod sursa (job #2129355) | Cod sursa (job #2580918) | Cod sursa (job #2579176) | Cod sursa (job #95919) | Cod sursa (job #1822524)
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <climits>
#include <vector>
#include <queue>
#include <set>
using namespace std;
static const int INF = 0x3f3f3f3f;
int N, M;
int d[50005];
vector<pair<int, int> > adj[50005];
void dijkstra(int v) {
for (int i = 1; i <= N; i++) d[i] = INF;
set<pair<int, int> > s;
d[v] = 0;
int u;
s.insert({d[v], v});
while (!s.empty()) {
u = s.begin()->second;
s.erase(s.begin());
for (int i = 0; i < adj[u].size(); i++) {
pair<int, int> p = adj[u][i];
if (d[p.first] > d[u] + p.second) {
s.erase({d[p.first], p.first});
d[p.first] = d[u] + p.second;
s.insert({d[p.first], p.first});
}
}
}
}
int main() {
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
scanf("%d %d", &N, &M);
for (int i = 1; i <= N; i++) adj[i].reserve(N + 1);
for (int i = 1; i <= M; i++) {
int x, y, w;
scanf("%d %d %d", &x, &y, &w);
adj[x].push_back({y, w});
}
dijkstra(1);
for (int i = 2; i <= N; i++) {
printf("%d ", d[i]);
}
printf("%\n");
}