Pagini recente » Cod sursa (job #3310140) | Cod sursa (job #2159164) | Cod sursa (job #1609744) | Diferente pentru problema/zigzag2 intre reviziile 14 si 13 | Cod sursa (job #3324840)
#include <fstream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
const int MAXN = 200000;
int n, m;
vector<pair<int,int>> adj[MAXN + 5];
vector<long long> Dijkstra(int start) {
vector<long long> d(n+1, 1e18);
priority_queue<pair<long long,int>, vector<pair<long long,int>>, greater<pair<long long,int>>> q;
d[start]=0;
q.push({0, start});
while(!q.empty()) {
long long dist_u=q.top().first;
int u=q.top().second;
q.pop();
if (dist_u>d[u]) continue;
for(auto &edge : adj[u]) {
int v=edge.first;
int cost_edge=edge.second;
if(d[v]>dist_u+cost_edge) {
d[v]=dist_u+cost_edge;
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});
}
int start=1;
vector<long long> dist = Dijkstra(start);
for(int i=2;i<=n;i++) {
if(dist[i]==1e18) g<<0<<" ";
else g<<dist[i]<<" ";
}
return 0;
}