Cod sursa(job #3312845)

Utilizator andreidumitrache1709andreidumitrache andreidumitrache1709 Data 30 septembrie 2025 11:15:34
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.34 kb
#include <bits/stdc++.h>
#define MAXN 50000
using namespace std;
int dist[MAXN + 1];
struct cel {
    int nod , val;
    bool operator <(cel const &x) const {
        return x.val < val;
    };
};
vector< cel >edges[MAXN + 1];
priority_queue< cel >pq;
int main() {
    ifstream cin( "dijkstra.in" );
    ofstream cout( "dijkstra.out" );
    int n , m , i , a , b , c;
    cel k;
    cin >> n >> m;
    for( i = 1 ; i <= m ; i++ ) {
        cin >> a >> b >> c;
        edges[a].push_back( { b , c } );
        //edges[b].push_back( { a , c } );
    }
    for( i = 2 ; i <= n ; i++ )
        dist[i] = INT_MAX;
    pq.push( { 1 , 0 } );
    dist[1] = 0;
    while( !pq.empty() ) {
        k = pq.top();
        pq.pop();
        if( k.val <= dist[k.nod] ) {
            for( auto x : edges[k.nod] ) {
                //cout << dist[k] << ' ' << k << ' ' << x.nod << ' ' << x.val << '\n';
                if( dist[x.nod] > dist[k.nod] + x.val ) {
                    //cout << x.nod << ' ' << x.val << '\n';
                    dist[x.nod] = dist[k.nod] + x.val;
                    pq.push( { x.nod , dist[x.nod] } );
                }
            }
        }
    }
    for( i = 2 ; i <= n ; i++ ) {
        if( dist[i] == INT_MAX )
            dist[i] = 0;
        cout << dist[i] << ' ';
    }
    cout << '\n';
    return 0;
}