Pagini recente » Cod sursa (job #618176) | Cod sursa (job #1512579) | Cod sursa (job #2254144) | Cod sursa (job #754477) | Cod sursa (job #2918291)
#include <bits/stdc++.h>
#include <bits/extc++.h>
using namespace std;
// using namespace __gnu_pbds;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
const int NMAX = 5e4;
const int INF = 1e9;
int n, m;
vector<pair<int, int>> adj[NMAX + 1];
int dist[NMAX + 1];
bool inQ[NMAX + 1];
template<typename T>
struct compare {
bool operator () (T a, T b) {
return dist[a] > dist[b];
}
};
__gnu_pbds :: priority_queue<int, compare<int>, __gnu_pbds :: thin_heap_tag> pq;
__gnu_pbds :: priority_queue<int, compare<int>, __gnu_pbds :: thin_heap_tag> :: point_iterator nodeIt[NMAX + 1];
void dij(int u = 1) {
for(int i = 1; i <= n; i++) {
dist[i] = INF;
}
dist[u] = 0;
nodeIt[u] = pq.push(u);
inQ[u] = 1;
while(!pq.empty()) {
int v = pq.top();
pq.pop();
inQ[v] = 0;
for(const auto &it: adj[v]) {
if(dist[v] + it.second < dist[it.first]) {
dist[it.first] = dist[v] + it.second;
if(!inQ[it.first]) {
nodeIt[it.first] = pq.push(it.first);
inQ[it.first] = 1;
} else {
pq.modify(nodeIt[it.first], it.first);
}
}
}
}
}
int main() {
fin >> n >> m;
for(int i = 1; i <= m; i++) {
int u, v, c;
fin >> u >> v >> c;
adj[u].push_back({v, c});
}
dij();
for(int i = 2; i <= n; i++) {
if(dist[i] == INF) {
dist[i] = 0;
}
fout << dist[i] << " ";
}
return 0;
}