Cod sursa(job #2551615)

Utilizator Robys01Robert Sorete Robys01 Data 19 februarie 2020 23:52:03
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <bits/stdc++.h>
#define MMAX 1000001
#define NMAX 100001
using namespace std;

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

int n, m, s, nr, vf[MMAX*2], urm[MMAX*2], last[NMAX];
queue < pair<int,int> >Q;
int dist[NMAX];
bitset<NMAX> viz;

void adauga(int nod, int v)
{
    vf[++nr] = v;
    urm[nr] = last[nod];
    last[nod] = nr;
}

void citire()
{
    fin>>n>>m>>s;
    for(int i, j, k = 1; k<=m; k++)
    {
        fin>>i>>j;
        adauga(i, j);
    }
}
void bfs()
{
    viz[s] = 1;
    Q.push({s, 0});
    while(!Q.empty())
    {
        int nod = Q.front().first;
        int distNod = Q.front().second;
        Q.pop();
        dist[nod] = distNod;

        for(int k = last[nod]; k; k = urm[k])
        {
            if(!viz[vf[k]])
            {
                viz[vf[k]] = 1;
                Q.push({vf[k], distNod+1});
            }
        }

    }

}

int main()
{
    citire();
    bfs();
    for(int i=1; i<=n; i++)
        if(dist[i] == 0 and i != s)
            fout<<-1<<' ';
        else
            fout<<dist[i]<<' ';

    return 0;
}