Pagini recente » Cod sursa (job #727716) | Cod sursa (job #2309619) | Cod sursa (job #1023050) | Cod sursa (job #1381466) | Cod sursa (job #2693164)
#include <iostream>
#include <vector>
#include <fstream>
#include <climits>
#include <queue>
#define Nmax 50010
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int n, m;
vector<pair<int, int>> graph[Nmax];
bool visited[Nmax];
void solve(int startNode) {
priority_queue<pair<int, int>> pq;
vector<int> distances(n + 1, INT_MAX);
pq.emplace(0, startNode);
distances[startNode] = 0;
while(!pq.empty()) {
auto vertex = pq.top().second;
pq.pop();
for(auto pair : graph[vertex]) {
int current = pair.first;
int weight = pair.second;
if(distances[current] > distances[vertex] + weight) {
distances[current] = distances[vertex] + weight;
if (!visited[current]) {
pq.emplace(distances[current], current);
}
visited[current] = true;
}
}
}
for(int i = 2; i <= n; i++) {
fout << (distances[i] == INT_MAX ? 0 : distances[i]) << " ";
}
}
int main() {
// reading
fin >> n >> m;
for(int i = 0; i < m; i++) {
int x, y, weight;
fin >> x >> y >> weight;
graph[x].emplace_back(y, weight);
}
solve(1);
}