Pagini recente » Cod sursa (job #733770) | Cod sursa (job #295022) | Cod sursa (job #107992) | Cod sursa (job #332039) | Cod sursa (job #2325306)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("dijkstra.in");
ofstream fout ("dijkstra.out");
int n, m, i, a, b, c, k, vecin, cost;
int D[50005];
multiset <pair <int, int> > s;
multiset <pair <int, int> > :: iterator it;
vector <pair <int, int> > L[50005];
int main(){
fin >> n >> m;
for (i=1; i<=m; i++){
fin >> a >> b >> c;
L[a].push_back ({b, c});
}
for (i=1; i<=n; i++){
D[i] = INT_MAX;
}
D[1] = 0;
s.insert ({0, 1});
while (!s.empty()){
k = s.begin() -> second;
s.erase ({s.begin()->first, k});
for (i=0; i<L[k].size(); i++){
vecin = L[k][i].first;
cost = L[k][i].second;
if (D[vecin] > D[k] + cost){
s.erase ({D[vecin], vecin});
D[vecin] = D[k] + cost;
s.insert({D[vecin], vecin});
}
}
}
for (i=2; i<=n; i++){
if (D[i] == INT_MAX){
fout << 0 << " ";
}
else{
fout << D[i] << " ";
}
}
return 0;
}