Pagini recente » Cod sursa (job #913496) | Cod sursa (job #3316457) | Cod sursa (job #1673878) | Cod sursa (job #1838758) | Cod sursa (job #3323479)
#include <fstream>
#include <queue>
#include <climits>
#include <vector>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
const int inf = 2000000000;
int main(){
int n, m;
fin >> n >> m;
vector<vector<pair<int, int>>> graf(n+1);
for(int i=0; i<m; i++) {
int x, y, z;
fin >> x >> y >> z;
graf[x].push_back({y, z});
}
vector<int> dist(n+1, inf);
dist[1] = 0;
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
pq.push({0, 1});
while(!pq.empty()) {
int d = pq.top().first;
int node = pq.top().second;
pq.pop();
if (d > dist[node]) {
continue;
}
for(unsigned int i=0; i<graf[node].size(); i++) {
int v = graf[node][i].first;
int c = graf[node][i].second;
if (dist[node] + c < dist[v]) {
dist[v] = dist[node] + c;
pq.push({dist[v], v});
}
}
}
for(int i=2; i<=n; i++) {
if (dist[i] == inf) {
fout << "0";
} else {
fout << dist[i];
}
if (i<n) {
fout << " ";
}
}
fout << endl;
return 0;
}