Cod sursa(job #3273419)

Utilizator pacelaaaCiurea Pavel pacelaaa Data 1 februarie 2025 23:30:43
Problema Algoritmul Bellman-Ford Scor 35
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <bits/stdc++.h>

using namespace std;

const int Nmax = 250001;
const int INF = 1e9;
int dist[Nmax];

vector< pair<int, int> > adj[Nmax];

int main()
{
    int n, m, i, u, v, cost, j, l;
    ifstream fin ( "bellmanford.in");
    ofstream fout ( "bellmanford.out" );

    fin >> n >> m;
    for ( i = 0; i < m; i ++ ) {
      fin >> u >> v >> cost;
      adj[u].push_back( {v, cost} );
    }

    for ( i = 2; i <= n; i ++ )
      dist[ i ] = INF;

    for ( l = 0; l < n - 1; l ++ ) {
      for ( j = 1; j <= n; j ++ )
        for ( i = 0; i < adj[j].size(); i ++  )
          if ( dist[j] != INF && dist[j] + adj[j][i].second < dist[ adj[j][i].first ] )
            dist[ adj[j][i].first ] = dist[j] + adj[j][i].second;
    }

    bool ok = true;
    for ( j = 1; j <= n; j ++ )
        for ( i = 0; i < adj[j].size(); i ++  )
          if ( dist[j] + adj[j][i].second < dist[ adj[j][i].first ] )
            ok = false;

    if ( !ok )
      fout << "Ciclu negativ!\n";
    else
      for ( i = 2; i <= n; i ++ )
        fout << dist[i] << " ";

    fin.close();
    fout.close();

    return 0;
}