Pagini recente » Cod sursa (job #1486964) | Cod sursa (job #2338533) | Cod sursa (job #290648) | Cod sursa (job #73019) | Cod sursa (job #3156263)
#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 = 1e9 + 1;
const int MARIME = 50005;
int n, m, start = 1, dist[MARIME];
priority_queue<pi, vector<pi>, greater<pi>> 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(make_pair(start, 0));
for (int i = 1; i <= m; i++) {
int x, y, d;
fin >> x >> y >> d;
graf[x].push_back(make_pair(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];
int vecin = x.first;
if (cost + x.second >= dist[vecin]) {
continue;
}
dist[vecin] = cost + x.second;
pq.push(make_pair(vecin, dist[vecin]));
}
}
// afisare
for (int i = 2; i <= n; i++) {
fout << (dist[i] == INF ? 0 : dist[i]) << ' ';
}
return 0;
}