Pagini recente » Cod sursa (job #2565301) | Cod sursa (job #1173354) | Cod sursa (job #1892812) | Cod sursa (job #2637254) | Cod sursa (job #2416313)
#include <bits/stdc++.h>
using namespace std;
using Edge = pair <int, int>;
const int MAXN = 5e4, INF = 1e9 + 7;
int dist[1 + MAXN];
vector <Edge> gr[1 + MAXN];
int n;
void dijkstra (int start) {
int i;
priority_queue <Edge> heap; /// it's not an edge i know
heap.push ({0, start});
for (i = 1; i <= n; i++)
dist[i] = INF;
dist[start] = 0;
while (!heap.empty ()) {
Edge nod = heap.top ();
heap.pop ();
nod.first = -nod.first;
if (dist[nod.second] != nod.first)
continue;
for (Edge vec : gr[nod.second])
if (dist[vec.first] > dist[nod.second] + vec.second) {
dist[vec.first] = dist[nod.second] + vec.second;
heap.push ({-dist[vec.first], vec.first});
}
}
}
int main() {
int m, i, x, y, c;
freopen ("dijkstra.in", "r", stdin);
freopen ("dijkstra.out", "w", stdout);
scanf ("%d%d", &n, &m);
for (i = 1; i <= m; i++) {
scanf ("%d%d%d", &x, &y, &c);
gr[x].push_back ({y, c});
gr[y].push_back ({x, c});
}
dijkstra (1);
for (i = 2; i <= n; i++)
printf ("%d ", dist[i]);
return 0;
}