Pagini recente » Cod sursa (job #3259005) | Cod sursa (job #896112) | Cod sursa (job #3174908) | Cod sursa (job #3253152) | Cod sursa (job #2462802)
#include <fstream>
#include <iostream>
#include <queue>
#include <vector>
#include <bitset>
#define NMAX 50005
#define VALMAX 1000005
using namespace std;
bitset<NMAX> inQueue;
vector< pair < int, int > > v[NMAX];
priority_queue< pair < int, int > > q;
int dist[NMAX];
void dijkstra(int startNode) {
q.push(make_pair(0, startNode));
inQueue[startNode] = 1;
dist[startNode] = 0;
while (!q.empty()) {
int node = q.top().second;
int distance = -q.top().first;
inQueue[node] = 0;
q.pop();
for (auto iterator : v[node]) {
if (dist[iterator.first] > dist[node] + iterator.second) {
dist[iterator.first] = dist[node] + iterator.second;
if (!inQueue[iterator.first]) {
q.push(make_pair(-dist[iterator.first], iterator.first));
inQueue[iterator.first] = 1;
}
}
}
}
}
int main() {
ifstream cin("dijkstra.in");
ofstream cout("dijkstra.out");
int n, m;
int x, y, z;
cin >> n >> m;
for (int i = 0; i < m; i++) {
cin >> x >> y >> z;
v[x].push_back(make_pair(y, z));
}
for (int i = 1; i <= n; i++) {
dist[i] = VALMAX;
}
dijkstra(1);
for (int i = 2; i <= n; i++) {
cout << (dist[i] != VALMAX ? dist[i] : 0) << ' ';
}
cin.close();
cout.close();
return 0;
}