Pagini recente » Cod sursa (job #3241873) | Cod sursa (job #2335036) | Cod sursa (job #1313098) | Cod sursa (job #493362) | Cod sursa (job #2409732)
#include <fstream>
#include <set>
#include <vector>
#define DEF 110
#define INF 1 << 29
using namespace std;
ifstream fin ("dijkstra.in");
ofstream fout ("dijkstra.out");
int n, p, D[DEF];
vector < pair < int, int > > L[DEF];
set < pair < int, int > > S;
int main () {
fin >> n >> p;
int x, y, c;
while (fin >> x >> y >> c) {
L[x].push_back ({y, c});
}
for (int i = 0; i <= n; ++ i) {
D[i] = INF;
}
D[p] = 0;
S.insert ({0, p});
while (!S.empty ()) {
int currNod = S.begin () -> second;
S.erase (S.begin ());
for (int i = 0; i < L[currNod].size (); ++ i) {
int vecin = L[currNod][i].first;
int dist = L[currNod][i].second;
if (D[vecin] > D[currNod] + dist) {
S.erase ({D[vecin], vecin});
D[vecin] = D[currNod] + dist;
S.insert ({D[vecin], vecin});
}
}
}
for (int i = 1; i <= n; ++ i) {
if (D[i] == INF) {
fout << "-1 ";
}
else {
fout << D[i] << " ";
}
}
return 0;
}