Pagini recente » Cod sursa (job #1602429) | Cod sursa (job #2791658) | Cod sursa (job #1051650) | Cod sursa (job #2046096) | Cod sursa (job #3325492)
#include <iostream>
#include <vector>
#include <set>
#define pii pair<int, int>
using namespace std;
const int NMAX = 5e5 + 5; // 5 * 10^ 5 + 5
const char nl = '\n';
const int INF = 1e9 + 7; // 10 ^ 9 + 7
vector<pii> g[NMAX];
int dist[NMAX], visited[NMAX];
void dijkstra(int source, int size) {
for(int i = 1; i <= size; ++i) {
dist[i] = INF;
}
set<pii> pq;
dist[source] = 0;
pq.insert({0, source});
//visited[source] = 0;
while(!pq.empty()) {
int cur_node = pq.begin()->second;
int cur_weight = -(pq.begin()->first);
pq.erase(pq.begin());
// if(cur_weight > dist[cur_node]) {
// continue;
// }
/*if(visited[cur_node] == 1) {
continue;
}
visited[cur_node] = 1;
*/
for(auto neigh: g[cur_node]) {
if(dist[neigh.first] > dist[cur_node] + neigh.second) {
pq.erase({-dist[neigh.first], neigh.first});
dist[neigh.first] = dist[cur_node] + neigh.second;
pq.insert({-dist[neigh.first], neigh.first}); // prima e distanta
}
}
}
}
int main()
{
// freopen("dijkstra.in", "r", stdin);
// freopen("dijkstra.out", "w", stdout);
int n, m;
cin >> n >> m;
for(int i = 1; i <= m; ++i) {
int u, v, w;
cin >> u >> v >> w;
g[u].push_back({v, w}); // graf orientat
}
dijkstra(1, n);
for(int i = 2; i <= n; ++i) {
if(dist[i] == INF) {
cout << 0 << ' ';
} else {
cout << dist[i] << ' ';
}
}
return 0;
}