Pagini recente » Cod sursa (job #2398783) | Clasament minus | Borderou de evaluare (job #2288045) | Autentificare | Cod sursa (job #2559212)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("dijkstra.in");
ofstream fout ("dijkstra.out");
#define cin fin
#define cout fout
const int Nmax=50001;
const int infinit=INT_MAX/2-1;
int n,m;
int x,y,c;
int d[Nmax];
bitset <Nmax> viz;
vector < pair<int,int> >g[Nmax];
struct comp
{
bool operator()(int x, int y){
return d[x]>d[y];
}
};
priority_queue <int, vector <int>, comp > coada;
void read(){
cin>>n>>m;
while (m--){
cin>>x>>y>>c;
g[x].push_back(make_pair(y,c));
g[y].push_back(make_pair(x,c));
}
}
void solve(int inceput){
for (int i=1; i<=n; i++)
d[i]=infinit;
d[inceput]=0;
coada.push(inceput);
viz[inceput]=true;
while (!coada.empty()){
int nodCurent=coada.top();
coada.pop();
viz[nodCurent]=false;
for (int i=0; i<g[nodCurent].size(); i++)
{
int vecin=g[nodCurent][i].first;
int cost=g[nodCurent][i].second;
if (d[nodCurent]+cost<d[vecin])
{
d[vecin]=d[nodCurent]+cost;
if (viz[vecin]==false)
{
coada.push(vecin);
viz[vecin]=true;
}
}
}
}
}
void afis(int inceput){
for (int i=1; i<=n; i++){
if (d[i]!=infinit)
cout<<d[i]<<" ";
else cout<<0<<" ";
}
}
int main()
{
read();
solve(1);
afis(1);
return 0;
}