Pagini recente » Cod sursa (job #1068453) | Cod sursa (job #1717901) | Cod sursa (job #1857422) | Cod sursa (job #774653) | Cod sursa (job #1826785)
#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});
}
}
}
}
void dijkstra2(int source) {
dist[source] = 0;
set<pair<int, int> > q;
q.insert({source, 0});
while (!q.empty()) {
pair<int, int> node = *q.begin();
q.erase(q.begin());
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.insert({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++) {
if (dist[i] == INF) printf("0 ");
else printf("%d ", dist[i]);
}
printf("\n");
}