Pagini recente » Cod sursa (job #1130069) | Cod sursa (job #1596680) | Cod sursa (job #633147) | Cod sursa (job #2899005) | Cod sursa (job #2784744)
#include <bits/stdc++.h>
#define nmax 50005
#define f first
#define s second
#define inf INT_MAX
using namespace std;
string prob="dijkstra";
ifstream in(prob+".in");
ofstream out(prob+".out");
int dist[nmax];
vector<pair<int,int>> v[nmax];
void dijk(){
for(int i=2;i<nmax;i++)dist[i]=inf;
set<pair<int,int>> s;
s.insert({0,1});
while(!s.empty()){
int nod=s.begin()->s;
s.erase(s.begin());
for(auto i:v[nod]){
if(dist[i.f]>dist[nod]+i.s){
if(dist[i.f]!=inf){
s.erase(s.find({dist[i.f],i.f}));
}
dist[i.f]=dist[nod]+i.s;
s.insert({dist[i.f],i.f});
}
}
}
}
int main(){
int n,m;
in>>n>>m;
int x,y,z;
while(m--){
in>>x>>y>>z;
v[x].push_back({y,z});
}
dijk();
for(int i=2;i<=n;i++){
if(dist[i]==inf)dist[i]=0;
out<<dist[i]<<' ';
}
}