Cod sursa(job #3216145)

Utilizator KarinaDKarina Dumitrescu KarinaD Data 15 martie 2024 17:50:54
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>

using namespace std;

ifstream fin ( "dijkstra.in" );
ofstream fout ( "dijkstra.out" );

const int N = 50000;

int dist[N + 10];

struct edge{
    int x, cost;
};

struct inQueue {
    
    int node, dist;
    
    bool operator < ( const inQueue &other ) const {
        return other.dist < dist;
    }
};

vector <edge> g[N + 10];

priority_queue <inQueue> q;

int dijkstra () {
    
    q.push ( {1, 0} );
    
    dist[1] = 0;
    
    while ( q.size() > 0 ) {
        
        int node = q.top().node;
        
        q.pop();
        
        for ( int i = 0; i < g[node].size(); i++ ) {
            if ( dist[g[node][i].x] > dist[node] + g[node][i].cost ) {
                dist[g[node][i].x] = dist[node] + g[node][i].cost;
                q.push ( { g[node][i].x, dist[g[node][i].x] } );
            }
        }
    }
    
    return 0;
}

int main() {
    
    int n, m, a, b, c;
    
    fin >> n >> m;
    
    for ( int i = 0; i < m; i++ ) {
        
        fin >> a >> b >> c;
        
        g[a].push_back({b, c});
        g[b].push_back({a, c});
    }
    
    for ( int i = 1; i <= n; i++ )
        dist[i] = 1e9;
    
    dijkstra ();
    
    for ( int i = 2; i <= n; i++ )
        fout << dist[i] << " ";
    
    return 0;
}