Cod sursa(job #3152130)

Utilizator andiRTanasescu Andrei-Rares andiR Data 24 septembrie 2023 01:49:04
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.33 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <unordered_map>
#include <set>
#include <queue>
#include <stack>
#include <deque>
#include <iomanip>
#include <vector>
#include <bitset>

#pragma GCC optimize("O3")
#define fi first
#define se second
#define pb push_back
#define pf push_front

using namespace std;
ifstream fin ("dijkstra.in");
ofstream fout ("dijkstra.out");
typedef long long ll;
const ll Nmax=5e4+5, inf=(ll)1e15+5;
using pii=pair<int, int>;

ll n, m, dp[Nmax];
vector <pii> ad[Nmax];
bool vis[Nmax];
priority_queue <pii, vector<pii>, greater<pii>> pq;
inline void dijkstra(){
    dp[0]=0;
    for (int i=1; i<n; i++)
        dp[i]=inf;
    pq.push({0, 0});
    while (!pq.empty()){
        pii crt=pq.top();
        pq.pop();
        if (vis[crt.se])
            continue;
        vis[crt.se]=1;
        for (auto it:ad[crt.se]){
            dp[it.fi]=min(dp[it.fi], dp[crt.se]+it.se);
            pq.push({dp[it.fi], it.fi});
        }
    }
}
int main()
{
    fin>>n>>m;
    int a, b, c;
    for (int i=0; i<m; i++){
        fin>>a>>b>>c;
        a--; b--;
        ad[a].pb({b, c});
    }
    dijkstra();
    for (int i=1; i<n; i++){
        if (dp[i]==inf)
            fout<<0<<' ';
        else fout<<dp[i]<<' ';
    }
    return 0;
}