Cod sursa(job #2770895)

Utilizator Tudor06MusatTudor Tudor06 Data 23 august 2021 22:33:16
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <fstream>
#include <iostream>
#include <vector>
#include <deque>

using namespace std;

const int INF = 1e9;

const int NMAX = 1e5;

vector <int> edges[NMAX + 1];
deque <pair<int, int>> dq;

int dist[NMAX + 1];

void bfs( int node ) {
    dq.push_back( { node, 0 } );
    while ( !dq.empty() ) {
        node = dq.front().first;
        int d = dq.front().second;
        dq.pop_front();
        if ( !dist[node] )
            dist[node] = d;
        for ( auto i : edges[node] ) {
            if ( !dist[i] ) {
                dq.push_back( { i, d + 1 } );
            }
        }
    }
}
int main() {
    ifstream fin( "bfs.in" );
    ofstream fout( "bfs.out" );
    int n, m, i, a, b, s;
    fin >> n >> m >> s;
    for ( i = 0; i < m; i ++ ) {
        fin >> a >> b;
        if ( a != b ) {
            edges[a].push_back( b );
        }
    }
    bfs( s );
    for ( i = 1; i <= n; i ++ ) {
        if ( i == s ) {
            fout << 0 << ' ';
        } else if ( dist[i] == 0 ) {
            fout << -1 << ' ';
        } else {
            fout << dist[i] << ' ';
        }
    }
    return 0;
}