Pagini recente » Cod sursa (job #873241) | Cod sursa (job #741582) | Cod sursa (job #1478948) | Cod sursa (job #2314359) | Cod sursa (job #3171938)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <climits>
#include <bitset>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
const int N = 5e4 + 10;
vector <pair<int, int>> vertex[N];
///first cost second vertex
int num_vert, num_edg;
vector <int> dist(N, INT_MAX);
int main() {
f >> num_vert >> num_edg;
for(int i = 1; i <= num_edg; i++){
int x, y, z;
f >> x >> y >> z;
vertex[x].push_back({z, y});
}
priority_queue <pair<int, int>> pq; /// first cost second vertex
dist[1] = 0;
pq.push({0, 1});
while(!pq.empty()){
int vert = pq.top().second, act_cost = -pq.top().first;
pq.pop();
for(auto edge: vertex[vert]){
if(act_cost + edge.first < dist[edge.second]){
dist[edge.second] = act_cost + edge.first;
pq.push({-dist[edge.second], edge.second});
}
}
}
for(int i = 2; i <= num_vert; i++){
g << dist[i] << " ";
}
return 0;
}