Pagini recente » Cod sursa (job #2682207) | Cod sursa (job #2320674) | Cod sursa (job #1774560) | Cod sursa (job #1502788) | Cod sursa (job #2875790)
#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];
queue< pair<int, int> > q;
void read() {
cin >> N >> M;
for(int i = 1; i <= M; i++) {
int from, to, weight;
cin >> from >> to >> weight;
adj[from].push_back(make_pair(to, weight));
}
for(int i = 2; i <= N; i++)
distances[i] = oo;
for(int i = 2; i <= N; i++)
visited[i] = false;
}
void solve() {
q.push(make_pair(startNode, 0));
while(!q.empty()) {
pair<int,int> currentNode = q.front();
q.pop();
//int node = currentNode.first;
//int weight = currentNode.second;
for(auto neighbour: adj[currentNode.first]) {
if (visited[neighbour.first]) continue;
visited[neighbour.first] = true;
if(distances[neighbour.first] > distances[currentNode.first] + neighbour.second)
distances[neighbour.first] = distances[currentNode.first] + neighbour.second;
q.push(make_pair(neighbour.first, distances[neighbour.first]));
}
}
}
void write() {
for(int i = 2; i <= N; i++)
cout << distances[i] << " ";
}
int main() {
read();
solve();
write();
//cout << oo;
return 0;
}