Pagini recente » Cod sursa (job #3311111) | Cod sursa (job #2928767) | Profil UnseenMarksman | Cod sursa (job #3316819) | Cod sursa (job #3357975)
#include <fstream>
#include <vector>
#include <set>
#include <climits>
using namespace std;
const int MAXN = 50001;
const int INF = INT_MAX;
int N, M;
vector<pair<int, int>> graph[MAXN];
int dist[MAXN];
set<pair<int, int>> pq;
int main() {
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
in >> N >> M;
for (int i = 0; i < M; i++) {
int a, b, c;
in >> a >> b >> c;
graph[a].push_back({b, c});
}
for (int i = 1; i <= N; i++) {
dist[i] = INF;
}
dist[1] = 0;
pq.insert({0, 1});
while (!pq.empty()) {
int u = pq.begin()->second;
pq.erase(pq.begin());
for (auto &edge : graph[u]) {
int v = edge.first;
int weight = edge.second;
if (dist[u] + weight < dist[v]) {
pq.erase({dist[v], v});
dist[v] = dist[u] + weight;
pq.insert({dist[v], v});
}
}
}
for (int i = 2; i <= N; i++) {
if (dist[i] == INF) {
out << 0 << " ";
} else {
out << dist[i] << " ";
}
}
in.close();
out.close();
return 0;
}