Pagini recente » Cod sursa (job #584299) | Cod sursa (job #1981343) | Cod sursa (job #1691737) | Cod sursa (job #1848931) | Cod sursa (job #2918845)
#include <bits/stdc++.h>
#pragma GCC optimize ("Ofast")
using namespace std;
ifstream fin ("dijkstra.in");
ofstream fout ("dijkstra.out");
const int INF = 2e9;
const int MAX_N = 50005;
int n, m, a, b, c;
int dist[MAX_N];
struct edge{
int nxt;
int cst;
}; vector <edge> e[MAX_N];
struct drum{
int nod;
int total;
};
inline bool operator < (const drum &lhs, const drum &rhs){
return lhs.total < rhs.total;
}
int crt, nxt, cst;
set <drum> best;
bitset <MAX_N> viz;
void dijkstra(int start){
dist[1] = 0;
for(int i=2; i<=n; i++)
dist[i] = INF;
best.insert({1, dist[1]});
while(!best.empty()){
crt = (*best.begin()).nod;
best.erase(best.begin());
if(!viz[crt])
for(int i=0; i < (int)e[crt].size(); i++){
nxt = e[crt][i].nxt;
cst = e[crt][i].cst;
if(dist[nxt] > dist[crt] + cst){
dist[nxt] = dist[crt] + cst;
best.insert({nxt, dist[nxt]});
}
}
viz[crt] = true;
}
}
int main (){
ios_base::sync_with_stdio(false);
fin.tie(nullptr), fout.tie(nullptr);
fin>>n>>m;
for(int i=1; i<=m; i++){
fin>>a>>b>>c;
e[a].push_back({b, c});
}
dijkstra(1);
for(int i=2; i<=n; i++)
if(dist[i] != INF)
fout<<dist[i]<<" ";
else
fout<<"0 ";
return 0;
}