Pagini recente » Cod sursa (job #2895416) | Cod sursa (job #143146) | Cod sursa (job #1118288) | Cod sursa (job #2709635) | Cod sursa (job #3296313)
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int nmax = 5e4 + 1, inf = 1e17;
struct Edge{
int cost, to;
bool operator <(const Edge &x) const{
return cost < x.cost;
}
bool operator >(const Edge &x) const{
return cost > x.cost;
}
};
vector<Edge> adj[nmax];
int takes[nmax];
int cmin[nmax];
priority_queue< pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>> > pq;
void solve(int start, int n){
pq.push({0, start});
for(int i = 1; i <= n; i++){
if(i == start) continue;
pq.push({inf, i});
}
while(!pq.empty()){
int curr = pq.top().second;
int C = pq.top().first;
pq.pop();
if(cmin[curr] != C) continue;
//s.erase(s.begin());
for(auto [x, y] : adj[curr]){
if(cmin[y] > C + x){
takes[y] = curr;
cmin[y] = C + x;
pq.push({cmin[y], y});
}
}
}
}
signed main()
{
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int n, m, a, b, c, start = 1;
fin >> n >> m;
for(int i = 1; i <= m; i++){
fin >> a >> b >> c;
adj[a].push_back({c, b});
}
for(int i = 1; i <= n; i++)
cmin[i] = inf;
cmin[start] = 0;
takes[start] = -1;
solve(start, n);
for(int i = 2; i <= n; i++){
//if(i == start) continue;
if(cmin[i] == inf)
fout << 0 << " ";
else
fout << cmin[i] << " ";
}
return 0;
}