Pagini recente » Cod sursa (job #2622709) | Cod sursa (job #479395) | Cod sursa (job #195034) | Cod sursa (job #3172781) | Cod sursa (job #2751194)
#include <fstream>
#include <vector>
#include <set>
using namespace std;
const int N = 5e4;
const int INF = 1 << 30;
struct elem {
int nod;
int dist;
bool operator<(const elem& e) const {
if (dist != e.dist)
return dist < e.dist;
return nod < e.nod;
}
};
vector<elem> gr[N + 1];
set<elem> s;
int d[N + 1];
bool viz[N + 1];
void dijkstra(int nod, int n) {
for (int i = 1; i <= n; ++i)
d[i] = INF;
d[nod] = 0;
s.insert({ nod, 0 });
while (!s.empty()) {
auto crt = *s.begin();
s.erase(s.begin());
if (!viz[crt.nod]) {
viz[crt.nod] = true;
for (auto vec : gr[crt.nod])
if (!viz[vec.nod] && crt.dist + vec.dist < d[vec.nod]) {
d[vec.nod] = crt.dist + vec.dist;
s.insert({ vec.nod, d[vec.nod] });
}
}
}
}
int main() {
ifstream cin("dijkstra.in");
ofstream cout("dijkstra.out");
int n, m;
cin >> n >> m;
while (m--) {
int x, y, z;
cin >> x >> y >> z;
gr[x].push_back({ y, z });
}
cin.close();
dijkstra(1, n);
for (int i = 2; i <= n; ++i)
cout << (d[i] == INF ? 0 : d[i]) << ' ';
cout.close();
return 0;
}