Pagini recente » Cod sursa (job #2840125) | Cod sursa (job #2431427) | Cod sursa (job #2633792) | Cod sursa (job #1598447) | Cod sursa (job #3165787)
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
const int inf = 1e9;
typedef pair<int, int> vecin;
int graf[50001];
int distante[50001];
vector<vecin> vecini[50001];
void dijkstra(){
priority_queue<vecin, vector<vecin>, greater<vecin>> pq;
distante[1] = 0;
pq.push({0, 1});
while (!pq.empty()){
int nod_curent = pq.top().second;
int cost = pq.top().first;
pq.pop();
for (int i = 0; i < vecini[nod_curent].size(); i++){
int vecin_curent = vecini[nod_curent][i].second;
if (distante[vecin_curent] > distante[nod_curent] + vecini[nod_curent][i].first){
distante[vecin_curent] = distante[nod_curent] + vecini[nod_curent][i].first;
pq.push(make_pair(distante[vecin_curent], vecin_curent));
}
}
}
}
int main(){
int noduri, arce;
cin >> noduri >> arce;
for (int i = 1; i <= noduri; i++){
distante[i] = inf;
}
for (int i = 1; i <= arce; i++){
int sursa, destinatie, cost;
cin >> sursa >> destinatie >> cost;
vecini[sursa].push_back(make_pair(cost, destinatie));
}
dijkstra();
for (int i = 2; i <= noduri; i++){
if (distante[i] == inf)
cout << 0 << " ";
else
cout << distante[i] << " ";
}
return 0;
}