Pagini recente » Cod sursa (job #2536037) | Monitorul de evaluare | Cod sursa (job #2176535) | Cod sursa (job #2449917) | Cod sursa (job #2456729)
#include <bits/stdc++.h>
#define NM 50005
#define oo (1<<30)
#define pii pair<int,int>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int n,m,d[NM];
bool viz[NM];
struct ok
{ bool operator()(int x,int y)
{ return d[x]>d[y]; }
};
vector <pii> v[NM];
priority_queue <int,vector<int>,ok> heap;
void Read();
void Dijkstra();
int main()
{ Read();
Dijkstra();
return 0;
}
void Read()
{ f>>n>>m;
for
( int x,y,c;
f>>x>>y>>c;
v[x].push_back({y,c})
);
}
void Dijkstra()
{ for(int i=2; i<=n; i++)
d[i]=oo;
heap.push(1);
viz[1]=true;
while(!heap.empty())
{ int nod=heap.top();
heap.pop();
viz[nod]=false;
for(int i=0; i<v[nod].size(); i++)
{ int nodV=v[nod][i].first;
int cost=v[nod][i].second;
if(d[nod]+cost<d[nodV])
{ d[nodV]=d[nod]+cost;
if(!viz[nodV])
{ viz[nodV]=true;
heap.push(nodV);
}
}
}
}
for(int i=2; i<=n; i++)
g<<(d[i]==oo ? 0 : d[i])<<' ';
}