Pagini recente » Cod sursa (job #259494) | Cod sursa (job #2778605) | Cod sursa (job #2529345) | Cod sursa (job #2344055) | Cod sursa (job #2163483)
#include <fstream>
#include <vector>
#include <queue>
#define Nmax 50009
#define INF 999999999
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
typedef pair <int,int> edge;
#define c first
#define x second
int n,m,d[Nmax],x,y,c;
vector <edge> G[Nmax];
struct cmp {
bool operator()(const edge &a, const edge &b) const {
return a.c > b.c;
}
};
priority_queue <edge, vector<edge>, cmp> Q;
void ReadInput() {
f>>n>>m;
for (int i=1; i<=m; ++i) {
f>>x>>y>>c;
G[x].push_back(edge(c,y));
}
}
void Dijkstra(int source) {
d[source]=0;
Q.push(edge(0,source));
while (!Q.empty()) {
edge aux=Q.top();
Q.pop();
int node=aux.x;
int cost=aux.c;
if (cost>d[node]) continue;
for (auto i: G[node])
{
// g<<i.c<<'\n';
if (d[i.x]>d[node]+i.c || d[node]==INF) {
d[i.x]=d[aux.x]+i.c;
Q.push(edge(d[i.x],i.x));
}
}
}
}
void Solve() {
for (int i=1; i<=n; ++i) d[i]=INF;
Dijkstra(1);
// for (int i=1; i<=n; ++i) {
//
// for (auto j: G[i]) g<<'('<<j.c<<' '<<j.x<<") ";
// g<<'\n';
// }
for (int i=2; i<=n; ++i) g<<d[i]<<' ';
}
int main() {
ReadInput();
Solve();
f.close(); g.close();
return 0;
}