Pagini recente » Cod sursa (job #951299) | Cod sursa (job #214561) | Cod sursa (job #2895793) | Cod sursa (job #3000495) | Cod sursa (job #3156251)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
typedef pair<int, int> pi;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
const int INF = 2000000000;
const int MARIME = 50005;
int n, m, start = 1, dist[MARIME];
struct cmp {
bool operator()(pi &a, pi &b) {
return a.second > b.second;
}
};
priority_queue<pi, vector<pi>, cmp> pq;
vector<pi> graf[MARIME];
int main() {
// citire si pregatire
fin >> n >> m;
for (int i = 1; i <= n; i++) {
dist[i] = INF;
}
dist[start] = 0;
pq.push({start, 0});
for (int i = 1; i <= m; i++) {
int x, y, d;
fin >> x >> y >> d;
graf[x].push_back({y, d});
// graf[y].push_back(make_pair(x, d));
}
// dijkstra
while (pq.size()) {
int nod = pq.top().first;
int cost = pq.top().second;
pq.pop();
for (size_t i = 0; i < graf[nod].size(); i++) {
auto x = graf[nod][i];
if (cost + x.second >= dist[x.first]) {
continue;
}
dist[x.first] = cost + x.second;
pq.push({x.first, dist[x.first]});
}
}
// afisare
for (int i = 2; i <= n; i++) {
fout << (dist[i] == INF ? 0 : dist[i]) << ' ';
}
return 0;
}