Pagini recente » Cod sursa (job #1690632) | Cod sursa (job #1090499) | Cod sursa (job #334994) | Cod sursa (job #1209377) | Cod sursa (job #2962809)
#include<fstream>
#include<vector>
#include<queue>
using namespace std;
ifstream cin("dijkstra2.in");
ofstream cout("dijkstra2.out");
int n,m,p,i,j;
int INFINIT=2000000000;
int ok[100001],d[100001];
vector < pair<int,int> > v[100001];
priority_queue < pair<int,int>, vector< pair<int,int> >, greater< pair<int,int> > > ord;
void citire(){
cin>>n>>m;
for(int i=1;i<=m;i++){
int ii,jj,d;
cin>>ii>>jj>>d;
v[ii].push_back(make_pair(jj,d));
v[jj].push_back(make_pair(ii,d));
}
}
void dijkstra(int nod){
for(i=1;i<=n;i++)
d[i]=INFINIT;
d[nod]=0;
ok[nod]=1;
ord.push(make_pair(0,nod));
while(!ord.empty()){
int elem=ord.top().second;
for(unsigned int i=0;i<v[elem].size();i++){
int vecin=v[elem][i].first;
int dist=v[elem][i].second;
if(dist+d[elem]<d[vecin]){
d[vecin]=d[elem]+dist;
if(ok[vecin]==0){
ok[vecin]=1;
ord.push(make_pair(d[vecin],vecin));
}
}
}
ord.pop();
}
}
void afisare(){
for(int i=2;i<=n;i++){
if(d[i]==INFINIT)
cout<<"0 ";
else
cout<<d[i]<<" ";
}
}
int main(){
citire();
dijkstra(1);
afisare();
return 0;
}