Pagini recente » Cod sursa (job #2120413) | Cod sursa (job #169041) | Cod sursa (job #212321) | Cod sursa (job #2219961) | Cod sursa (job #3326303)
#include <fstream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
const int MAXN = 50000;
int n, m;
vector<pair<int,int>> adj[MAXN + 5];
vector<int> Dijkstra (int start, vector<int> &tata){
priority_queue<pair<int,int>, vector<pair<int,int>>, greater<pair<int,int>>> q;
vector <int> d(n+1, 1e9);
vector <bool> viz(n+1, false);
d[start]=0;
q.push({0, start});
while (!q.empty()){
auto [dist, u] = q.top();
q.pop();
if (viz[u]==true) continue;
viz[u]=true;
for (auto &edge : adj[u]){
int v=edge.first;
int cost=edge.second;
if (d[u]+cost<d[v]){
d[v]=d[u]+cost;
tata[v]=u;
q.push({d[v], v});
}
}
}
return d;
}
int main() {
f>>n>>m;
for (int i=1;i<=m;i++) {
int x, y, c;
f>>x>>y>>c;
adj[x].push_back({y, c});
}
vector<int> tata(n+1, 0);
vector<int> dist = Dijkstra(1, tata);
for (int i=2;i<=n;i++) {
if (dist[i]==1e9) g<<0<<" ";
else g<<dist[i]<<" ";
}
g<<"\n";
return 0;
}