Cod sursa(job #1048031)

Utilizator Andrei1998Andrei Constantinescu Andrei1998 Data 5 decembrie 2013 10:36:03
Problema Flux maxim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>
#include <bitset>
#include <queue>
#include <list>

using namespace std;

list<int> graf[100005];
bitset<100005> viz;
queue<int> coada;
int d[100005];
int s;

inline void bfs()
{
    viz[s]=1;
    coada.push(s);
    d[s]=0;

    list<int>::iterator it;
    int y;

    while(!coada.empty())
    {
        y=coada.front();
        coada.pop();
        for(it=graf[y].begin();it!=graf[y].end();it++)
            if(!viz[*it])
            {
                viz[*it]=1;
                d[*it]=d[y]+1;
                coada.push(*it);
            }
    }
}

int main()
{
    ifstream cin("bfs.in");
    ofstream cout("bfs.out");

    int n=0,m=0,i,x,y;
    cin>>n>>m>>s;
    for(i=0;i<m;i++)
    {
        cin>>x>>y;
        graf[x].push_back(y);
    }
    bfs();
    for(i=1;i<=n;i++)
        if(!viz[i])
            cout<<"-1 ";
        else
            cout<<d[i]<<' ';
    cout<<'\n';

    cin.close();
    cout.close();
    return 0;
}