Pagini recente » Cod sursa (job #917376) | Cod sursa (job #1059184) | Cod sursa (job #1848800) | Cod sursa (job #1190685) | Cod sursa (job #1160478)
#include <fstream>
#include <vector>
#include <set>
#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];
set < 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;
for(int i = 1; i <= N; ++i)
H.insert(make_pair(D[i], i));
while(!H.empty()) {
int x = (*H.begin()).second, cost = (*H.begin()).first;
H.erase(make_pair(cost, x));
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]) {
H.erase(make_pair(D[y], y));
D[y] = D[x] + c;
H.insert(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;
}