Pagini recente » Borderou de evaluare (job #2648423) | Borderou de evaluare (job #2899875) | Borderou de evaluare (job #1095789) | Borderou de evaluare (job #2101432) | Cod sursa (job #2378062)
#include <bits/stdc++.h>
#define pii pair<int,int>
#define vii vector<pii>
#define N first
#define V second
#define INF 0xfffffff
#define MAXN 50010
using namespace std;
int n,m;
int Vl[MAXN];
vii A[MAXN];
void Dijkstra(int s){
priority_queue <pii,vector<pii>,greater<pii> > pq;
pq.push({s,0});
for(int i=1;i<=n;i++)
if(s!=i)
Vl[i]=INF;
else Vl[i]=0;
while(!pq.empty()){
pii c=pq.top();
if(c.V>Vl[c.N])continue;
for(int i=0;i<A[c.N].size();i++){
if(Vl[c.N]+A[c.N][i].V<Vl[A[c.N][i].N]){
Vl[A[c.N][i].N]=Vl[c.N]+A[c.N][i].V;
pq.push({A[c.N][i].N,Vl[c.N]+A[c.N][i].V});
}
}
pq.pop();
}
}
int main(){
ifstream cin("dijkstra.in");
ofstream cout("dijkstra.out");
cin>>n>>m;
for(int i=0;i<n;i++){
int a,b,d;
cin>>a>>b>>d;
A[a].push_back({b,d});
}
Dijkstra(1);
for(int i=2;i<=n;i++){
cout<<Vl[i]<<' ';
}
return 0;
}