Pagini recente » Cod sursa (job #775091) | Cod sursa (job #147705) | Cod sursa (job #1192920) | Cod sursa (job #1240549) | Cod sursa (job #2966467)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 50100;
int N, M;
bool wasSeen[NMAX];
vector <int> ans;
priority_queue <pair <int, int>> heap;
vector <pair <int, int>> edges[NMAX];
void read(){
scanf("%d%d", &N, &M);
int x, y, c;
for(int i = 1; i <= M; i++){
scanf("%d%d%d", &x, &y, &c);
edges[x].push_back(make_pair(y, c));
}
ans.resize(N + 1, 2e9);
}
void solve(pair <int, int> node){
heap.push(node);
ans[node.second] = 0;
while(!heap.empty()){
node = heap.top();
heap.pop();
if(wasSeen[node.second])
continue;
wasSeen[node.second] = true;
for(int i = 0; i < edges[node.second].size(); i++){
int nextNode = edges[node.second][i].first;
int nextCost = edges[node.second][i].second;
if(ans[nextNode] > node.first + nextCost){
ans[nextNode] = node.first + nextCost;
heap.push(make_pair(node.first + nextCost, nextNode));
}
}
}
}
int main() {
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
read();
solve(make_pair(0, 1));
for(int i = 2; i < ans.size(); i++){
if(ans[i] == 2e9)
ans[i] = 0;
printf("%d ", ans[i]);
}
return 0;
}