Cod sursa(job #2768024)

Utilizator un_fes_galbendaniel guba un_fes_galben Data 8 august 2021 22:57:01
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.43 kb
#include <fstream>
#include <vector>
#include <queue>
#include <climits>
using namespace std;
ifstream fin("bfs.in");
ofstream fout("bfs.out");
char buff[4096];
int pbuf=4095;
void readbuff()
{
    pbuf=0;
    fin.read(buff,4095);
}
int citire()
{
    int nr=0;
    if(pbuf==4095)
    {
        readbuff();
    }
    while(buff[pbuf]<'0'||buff[pbuf]>'9')
    {
        pbuf++;
        if(pbuf==4095)
        {
            readbuff();
        }
    }
    while(buff[pbuf]>='0'&&buff[pbuf]<='9')
    {
        nr=nr*10+buff[pbuf]-'0';
        pbuf++;
        if(pbuf==4095)
        {
            readbuff();
        }
    }
    return nr;
}
vector<int>v[100005];
queue<int>q;
int dist[100005];
void BFS(){
     int nod;
     while(!q.empty()){
        nod=q.front();q.pop();
        for(auto i:v[nod]){
            if(dist[i]>dist[nod]+1){
                dist[i]=dist[nod]+1;
                q.push(i);
            }
        }
     }
}
int main()
{
    int n,m,s,a,b;
    n=citire();m=citire();s=citire();
    for(int i=1;i<=m;i++){
        a=citire();b=citire();
        v[a].push_back(b);
    }
    for(int i=1;i<=n;i++){
        dist[i]=INT_MAX;
    }
    dist[s]=0;
    q.push(s);
    BFS();
    for(int i=1;i<=n;i++){
        if(dist[i]==INT_MAX){
            fout<<"-1 ";
        }
        else{
            fout<<dist[i]<<" ";
        }
    }
    fout<<'\n';
    return 0;
}