Pagini recente » Cod sursa (job #1599005) | Cod sursa (job #2190692) | Cod sursa (job #2234680) | Cod sursa (job #614711) | Cod sursa (job #2875976)
#include <iostream>
#include <vector>
#include <queue>
#include <fstream>
#include<limits.h>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
const int NMAX = 50005;
int N, M, startNode = 1;
int oo = INT_MAX;
vector<pair<int, int>> adj[NMAX];
int distances[NMAX];
bool visited[NMAX];
struct comp {
bool operator() (int x, int y) {
return distances[x] > distances[y];
}
};
priority_queue<int, vector<int>, comp> q;
void read() {
fin >> N >> M;
for(int i = 1; i <= M; i++) {
int from, to, weight;
fin >> from >> to >> weight;
adj[from].push_back(make_pair(to, weight));
}
for(int i = 2; i <= N; i++)
distances[i] = oo;
distances[startNode] = 0;
for(int i = 2; i <= N; i++)
visited[i] = false;
}
void solve() {
q.push(startNode);
visited[startNode] = true;
while(!q.empty()) {
int currentNode = q.top();
q.pop();
visited[currentNode] = true;
//int node = currentNode.first;
//int weight = currentNode.second;
for(int i = 0; i < adj[currentNode].size(); i++) {
int neighbour = adj[currentNode][i].first;
int weight = adj[currentNode][i].second;
if(distances[currentNode] + weight < distances[neighbour]) {
distances[neighbour] = distances[currentNode] + weight;
if(!visited[neighbour])
q.push(neighbour);
}
}
}
}
void write() {
for(int i = 2; i <= N; i++) {
if (distances[i] == oo)
fout << "0 ";
else
fout << distances[i] << " ";
}
}
int main() {
read();
solve();
write();
//cout << oo;
return 0;
}