Pagini recente » Cod sursa (job #643122) | Cod sursa (job #186110) | Cod sursa (job #224789) | Cod sursa (job #2227323) | Cod sursa (job #2558915)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
const int NMAX = 50005;
const int INF = (int)1e18;
vector <pair <int,int> >X[NMAX];
int N,M;
int D[NMAX];
bool Viz[NMAX];
struct Compara{
bool operator()(int x,int y)
{
return D[x]>D[y];
}
};
priority_queue <int, vector <int>, Compara> Q;
void Dijkstra()
{
D[1]=0;
Viz[1]=1;
Q.push(1);
while(!Q.empty()){
int Curent=Q.top();
Q.pop();
for(unsigned int i=0;i<X[Curent].size();i++){
int Vecin=X[Curent][i].first;
int Cost=X[Curent][i].second;
if(D[Vecin]>D[Curent]+Cost){
D[Vecin]=D[Curent]+Cost;
if(!Viz[Vecin]){
Viz[Vecin]=1;
Q.push(Vecin);
}
}
}
}
}
int main()
{
f>>N>>M;
for(int i=1;i<=N;i++){
D[i]=INF;
}
while(M){
int i,j,c;
f>>i>>j>>c;
X[i].push_back(make_pair(j,c));
M--;
}
Dijkstra();
for(int i=2;i<=N;i++){
if(D[i]==INF){
g<<0<<" ";
}else{
g<<D[i]<<" ";
}
}
f.close();
g.close();
return 0;
}