Pagini recente » Cod sursa (job #1818945) | Cod sursa (job #3329846) | Cod sursa (job #1823835) | Cod sursa (job #3348661) | Cod sursa (job #3355517)
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
const int NMAX = 1e5 + 5; // 10 ^ 5 + 5
const int INF = 1e9 + 7;
vector<pair<int, int>> g[NMAX];
int dist[NMAX];
void dijkstra(int source, int size) {
for(int i = 1; i <= size; ++i) {
dist[i] = INF;
}
priority_queue<pair<int, int>> q;
dist[source] = 0;
q.push({0, source}); // punem prima distanta ca sa sortam dupa distanta
while(!q.empty()) {
int curNode = q.top().second;
int curWeight = -q.top().first; // aici scoate din coada(ele erau adaugate negativ)
q.pop();
for(auto neigh: g[curNode]) {
// ne aflam in graf
// in graf x.first este nodul vecin
// iar x.second este costul muchiei de la x la nodul vecin
if(dist[neigh.first] > dist[curNode] + neigh.second) {
dist[neigh.first] = dist[curNode] + neigh.second;
q.push({-dist[neigh.first], neigh.first});
}
}
}
}
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; // muchie (u,v) cu costul w
g[u].push_back({v, w}); // ==> muchie de la u la v cu costul w
g[v].push_back({u, w}); // ==> muchie de la v la u cu costul w
}
dijkstra(1, n);
for(int i = 2; i <= n; ++i) {
if(dist[i] == INF) {
cout << 0 << ' ';
} else {
cout << dist[i] << ' ';
}
}
return 0;
}