Pagini recente » Cod sursa (job #2281818) | Cod sursa (job #1003417) | Diferente pentru preoni-2007/runda-4/solutii intre reviziile 28 si 29 | Cod sursa (job #502208) | Cod sursa (job #2906427)
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#ifndef INFOARENA
ifstream fin("ciorna.in");
ofstream fout("ciorna.out");
#else
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
#endif // HOME
const int N = 1e5 + 5;
const ll INF = 1e18;
vector <pair <int, int>> g[N];
ll d[N];
int main() {
int n, m;
fin >> n >> m;
for(int i = 1, u, v, w; i <= m; i++)
fin >> u >> v >> w,
g[u].emplace_back(v, w),
g[v].emplace_back(u, w);
set <pair <ll, int>> s;
s.insert(make_pair(0ll, 1));
fill(d + 2, d + n + 1, INF);
while(!s.empty()) {
int u = s.begin()->second;
s.erase(s.begin());
for(auto [v, w] : g[u]) if(d[v] > d[u] + w) {
if(s.count(make_pair(d[v], v))) s.erase(s.find(make_pair(d[v], v)));
s.insert(make_pair(d[u] + w, v));
d[v] = d[u] + w;
}
}
for(int i = 2; i <= n; i++)
fout << (d[i] == INF ? 0 : d[i]) << " ";
}