Pagini recente » Cod sursa (job #1874993) | Cod sursa (job #1980962) | Cod sursa (job #897840) | Cod sursa (job #851813) | Cod sursa (job #3319794)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define INT_N 50000
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
const long long INF = (1LL<<60);
int n,m,x,y,c;
vector<pair<int, int>> adj[INT_N];
vector<long long> dist(INT_N, INF);
void dijkstra(int nod){
priority_queue<pair<long long,int>, vector<pair<long long,int>>, std::greater<pair<long long,int>>> pq;
pq.push(make_pair(0,nod));
dist[nod] = 0;
while(!pq.empty()){
auto [wt,nodCrt] = pq.top();
pq.pop();
for(auto edge: adj[nodCrt]){
int vecin = edge.first;
int cost = edge.second;
if(dist[vecin] > dist[nodCrt] + cost){
dist[vecin] = dist[nodCrt] + cost;
pq.push(make_pair(dist[vecin], vecin));
}
}
}
}
int main(){
f >> n >> m;
dist.resize(n+1,INF);
for(int i=0; i<m; i++){
f >> x >> y >> c;
adj[x].push_back(make_pair(y,c));
}
dijkstra(1);
for(int i=2; i<=n; i++){
if(dist[i] == INF)
g << 0 << " ";
else
g << dist[i] << " ";
}
return 0;
}