Pagini recente » Cod sursa (job #3262264) | Cod sursa (job #2801395) | Cod sursa (job #3040324) | Cod sursa (job #3231346) | Cod sursa (job #3256343)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 5e4;
const int INF = 1e9;
vector< pair<int, int> > G[NMAX + 1];
int d[NMAX + 1]; //d[i] = distanta minima de la 1 la i
int vis[NMAX + 1];
int main() {
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int n, m;
f >> n >> m;
for(int i = 1; i <= m; i++) {
int x, y, c;
f >> x >> y >> c;
//G[x].push_back(make_pair(y, c));
G[x].push_back({y, c});
}
for(int i = 1; i <= n; i++) {
d[i] = INF;
}
d[1] = 0;
//O(mlogn)
//set< pair<int, int> > s; //(distanta, nod)
priority_queue< pair<int, int>, vector< pair<int, int> >, greater < pair<int, int> > > s;
s.push({d[1], 1});
while(!s.empty()) {
//auto it = s.begin();
int node = s.top().second;
//s.erase(it);
s.pop();
if(vis[node]) {
continue;
}
vis[node] = 1;
for(auto next : G[node]) {
int vecin = next.first;
int cost_muchie = next.second;
if(!vis[vecin] && d[vecin] > d[node] + cost_muchie) {
//s.erase({d[vecin], vecin});
d[vecin] = d[node] + cost_muchie;
s.push({d[vecin], vecin});
}
}
}
for(int i = 2; i <= n; i++) {
if(d[i] == INF) {
d[i] = 0;
}
g << d[i] << ' ';
}
return 0;
}