Pagini recente » Cod sursa (job #1630961) | Cod sursa (job #120925) | Cod sursa (job #39330) | Cod sursa (job #1009374) | Cod sursa (job #2693171)
#include <iostream>
#include <vector>
#include <fstream>
#include <climits>
#include <queue>
#define Nmax 50010
using namespace std;
ifstream fin("grader_test5.in");
ofstream fout("dijkstra.out");
int n, m;
vector<pair<int, int>> graph[Nmax];
bool alreadyInQueue[Nmax];
void solve(int startNode) {
priority_queue<pair<int, int>, vector<pair<int,int>>, greater<>> 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();
alreadyInQueue[vertex] = false;
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 (!alreadyInQueue[current]) {
pq.emplace(distances[current], current);
}
alreadyInQueue[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);
}