Pagini recente » Cod sursa (job #2781255) | Cod sursa (job #1927229) | Cod sursa (job #2705424) | Cod sursa (job #2429090) | Cod sursa (job #1826778)
#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const int NMAX = 50005;
int N, M;
vector<pair<int, int> > adj[NMAX];
int dist[NMAX];
void dijkstra(int source) {
dist[source] = 0;
priority_queue<pair<int, int> > q;
q.push({source, 0});
while (!q.empty()) {
pair<int, int> node = q.top();
q.pop();
int u = node.first;
int d = node.second;
if (d != dist[u]) continue;
for (int i = 0; i < adj[u].size(); i++) {
int v = adj[u][i].first;
int weight = adj[u][i].second;
int newDist = dist[u] + weight;
if (dist[v] > newDist) {
dist[v] = newDist;
q.push({v, newDist});
}
}
}
}
int main() {
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
scanf("%d %d", &N, &M);
memset(dist, INF, sizeof(dist));
for (int i = 0; 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 ", dist[i]);
printf("\n");
}