Pagini recente » Cod sursa (job #408111) | Cod sursa (job #2462597) | Cod sursa (job #809043) | Cod sursa (job #1756943) | Cod sursa (job #1160458)
#include <fstream>
#include <vector>
#include <queue>
#include <cstring>
using namespace std;
const int MAX_N = 50002;
const int INF = 0x3f3f3f3f;
int N, M;
int D[MAX_N];
vector < pair < int, int > > v[MAX_N];
priority_queue < pair < int, int >, vector < pair < int, int > >, greater < pair < int, int > > > H;
int main() {
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
f >> N >> M;
for(int i = 1, x, y, c; i <= M; ++i) {
f >> x >> y >> c;
v[x].push_back(make_pair(y, c));
}
memset(D, INF, sizeof(D));
D[1] = 0;
H.push(make_pair(D[1], 1));
while(!H.empty()) {
int x = H.top().second, cost = H.top().first;
H.pop();
if(cost > D[x])
continue;
for(int i = 0; i < (int) v[x].size(); ++i) {
int y = v[x][i].first, c = v[x][i].second;
if(D[x] + c < D[y]) {
D[y] = D[x] + c;
H.push(make_pair(D[y], y));
}
}
}
for(int i = 2; i <= N; ++i) {
if(D[i] == INF)
D[i] = 0;
g << D[i] << " ";
}
g << "\n";
f.close();
g.close();
return 0;
}