Pagini recente » Cod sursa (job #3299971) | Cod sursa (job #21736) | Cod sursa (job #2025116) | Cod sursa (job #2677146) | Cod sursa (job #3296289)
#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];
set<Edge> s;
void solve(int start){
s.insert({0, start});
while(!s.empty()){
int curr = s.begin()->to;
int C = s.begin()->cost;
s.erase(s.begin());
for(auto [x, y] : adj[curr]){
if(cmin[y] > C + x){
takes[y] = curr;
s.erase({cmin[y], y});
cmin[y] = C + x;
s.insert({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);
for(int i = 2; i <= n; i++){
//if(i == start) continue;
if(cmin[i] == inf)
fout << 0 << " ";
else
fout << cmin[i] << " ";
}
return 0;
}