Pagini recente » Cod sursa (job #1565818) | Cod sursa (job #1791370) | Cod sursa (job #2122479) | Cod sursa (job #1025972) | Cod sursa (job #3156280)
#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 = 60005;
int n, m, start = 1, dist[MARIME];
bool vizitat[MARIME];
struct cmp {
bool operator()(int &a, int &b) {
return dist[a] > dist[b];
}
};
priority_queue<int, vector<int>, cmp> pq;
vector<pi> graf[MARIME];
int main() {
// citire si pregatire
fin >> n >> m;
for (int i = 0; i <= n; i++) {
dist[i] = INF;
}
dist[start] = 0;
pq.push(start);
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.empty()) {
int nod = pq.top();
int cost = dist[nod];
pq.pop();
if (vizitat[nod]) {
continue;
}
vizitat[nod] = true;
for (unsigned int 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(vecin);
}
}
// afisare
for (int i = 2; i <= n; i++) {
fout << (dist[i] == INF ? 0 : dist[i]) << ' ';
}
return 0;
}