Pagini recente » Cod sursa (job #299827) | Cod sursa (job #297668) | Cod sursa (job #2761548) | Cod sursa (job #3188762) | Cod sursa (job #2330150)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define L 50005
#define Lm 250005
#define oo (1 << 31)-1
using namespace std;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
int d[L], n, m;
bool in_q[L];
struct comp{
bool operator ()(int x, int y){
return d[x]>d[y];
}
};
priority_queue <int, vector<int>, comp> Q;
vector <pair<int, int> > G[L];
void read(){
in >> n >> m;
for (int i=1;i<=m;++i){
int a, b, c;
in >> a >> b >> c;
G[a].push_back(make_pair(b, c));
}
}
void dijkstra(int Start){
for (int i=1;i<=n;++i)
d[i]=oo;
d[Start]=0;
Q.push(Start);
in_q[Start]=true;
while(!Q.empty()){
int nod=Q.top();
Q.pop();
in_q[nod]=false;
for (unsigned int i=0;i<G[nod].size();++i){
int urm=G[nod][i].first;
int dist=G[nod][i].second;
if (d[nod]+dist<d[urm]){
d[urm]=d[nod]+dist;
if (in_q[urm]==false){
Q.push(urm);
in_q[urm]=true;
}
}
}
}
}
void print(){
for (int i=2;i<=n;++i)
if (d[i]!=oo)
out << d[i] << " ";
else
out << "0 ";
}
int main()
{
read();
dijkstra(1);
print();
return 0;
}