Cod sursa(job #3040472)

Utilizator DordeDorde Matei Dorde Data 29 martie 2023 21:55:29
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include<fstream>
#include<vector>
#include<queue>

#define pii pair<int,int>
#define fi first
#define se second

using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int const N = 250003;
int n , m , a , b , c;
int dp[N];
vector<pii> v[N];
void dijkstra(){
    fill(dp + 1 , dp + 1 + n , (1 << 30));
    priority_queue<pii> h;
    h.emplace(0 , 1);
    dp[1] = 0;
    while(!h.empty()){
        pii x = h.top();
        h.pop();
        if(dp[x.se] != -x.fi)
            continue;
        for(pii e : v[x.se]){
            if(dp[e.fi] > -x.fi + e.se){
                dp[e.fi] = -x.fi + e.se;
                h.emplace(-dp[e.fi] , e.fi);
            }
        }
    }
}
int main(){
    fin >> n >> m;
    for(int i = 1 ; i <= n ; ++ i){
        fin >> a >> b >> c;
        v[a].emplace_back(b , c);
    }
    dijkstra();
    for(int i = 2 ; i <= n ; ++ i)
        fout << (dp[i] == (1 << 30) ? 0 : dp[i]) << ' ';
    fout << '\n';
    return 0;
}