Pagini recente » Cod sursa (job #2500984) | Cod sursa (job #2430809) | Cod sursa (job #473128) | Cod sursa (job #143929) | Cod sursa (job #3214768)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
const int MAX_SIZE = 5 * 1e4;
int n, m;
vector<pair<int, int>> graph[MAX_SIZE + 1];
vector<int> distances(MAX_SIZE + 1, INT_MAX);
vector<bool> visited(MAX_SIZE + 1);
struct compareDistances {
bool operator() (int firstNod, int secondNod) {
return distances[firstNod] > distances[secondNod];
}
};
priority_queue<int, vector<int>, compareDistances> currentNodes;
void findMinCost(int start) {
distances[start] = 0;
currentNodes.push(start);
visited[start] = true;
while (!currentNodes.empty()) {
int currentNode = currentNodes.top();
currentNodes.pop();
visited[currentNode] = false;
for (pair<int, int>& nextElement : graph[currentNode]) {
int nextNode = nextElement.first;
int cost = nextElement.second;
if (distances[currentNode] + cost < distances[nextNode]) {
distances[nextNode] = distances[currentNode] + cost;
if (!visited[nextNode]) {
currentNodes.push(nextNode);
visited[nextNode] = true;
}
}
}
}
}
int main() {
fin >> n >> m;
for (int i = 0; i < m; ++i) {
int x, y, distance;
fin >> x >> y >> distance;
graph[x].push_back(make_pair(y, distance));
}
findMinCost(1);
for (int i = 2; i <= n; ++i) {
if (distances[i] == INT_MAX) {
fout << "0 ";
} else {
fout << distances[i] << " ";
}
}
return 0;
}