Cod sursa(job #3273972)

Utilizator pacelaaaCiurea Pavel pacelaaa Data 4 februarie 2025 18:04:14
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <bits/stdc++.h>

using namespace std;

const int Nmax = 50001;
const int INF = 2e9;
#define PII pair<int, int>

struct comp {
  bool operator()( PII a, PII b ) {
    return a.second > b.second;
 }
} ;
priority_queue< PII, vector< PII >, comp > q;
vector< PII > adj[Nmax];
int dist[Nmax];
bool visited[ Nmax ];

int main()
{
    int n, m, i, u, v, w;
    ifstream fin ( "dijkstra.in" );
    ofstream fout ( "dijkstra.out" );

    fin >> n >> m;
    for ( i = 0; i < m; i ++ ) {
      fin >> u >> v >> w;
      adj[u].push_back( make_pair( v, w ) );
    }
    for ( i = 2; i <=n; i ++ )
      dist[ i ] = INF;
    q.push( {1,0} );
    while ( !q.empty() ) {
      u = q.top().first;
      q.pop();
      if ( visited[u] == false ) {
        visited[u] = true;
        for ( i = 0; i < adj[u].size(); i ++ ) {
          v = adj[u][i].first;
          w= adj[u][i].second;
          if ( dist[u] + w < dist[v] ) {
            dist [v] = dist[u] + w;
            q.push( {v, dist[v] } );
          }
        }
      }
    }

    for ( i = 2; i <= n; i ++ )
      if ( dist[i] != INF )
        fout << dist[i] << " ";
      else
        fout << 0 << " ";

    return 0;
}