Cod sursa(job #2954742)

Utilizator andu2006Alexandru Gheorghies andu2006 Data 15 decembrie 2022 10:57:59
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.46 kb
#include<bits/stdc++.h>

using namespace std;
typedef long long ll;
const ll NMAX=2e5+5,buffsize=1<<13;
FILE* fin;
char buff[buffsize];
int buffpos=buffsize;
int read(){
    if(buffpos==buffsize) fread(buff,1,buffsize,fin),buffpos=0;
    int n=0;
    while(buff[buffpos]<'0' || buff[buffpos]>'9'){
        ++buffpos;
        if(buffpos==buffsize) fread(buff,1,buffsize,fin),buffpos=0;
    }
    while(buff[buffpos]>='0' && buff[buffpos]<='9'){
        n=(n<<1)+(n<<3)+(buff[buffpos]^48);
        ++buffpos;
        if(buffpos==buffsize) fread(buff,1,buffsize,fin),buffpos=0;
    }
    return n;
}
typedef long long ll;
vector<ll> edg[NMAX];
bool visited[NMAX];
ll dist[NMAX];
void dfs(ll u){
    visited[u]=1;
    for(ll i=0;i<edg[u].size();i++){
        if(!visited[edg[u][i]])
            dfs(edg[u][i]);
    }
}
int main(){
    fin = fopen("bfs.in","r");
    ofstream fout("bfs.out");
    ll n=read(),m=read(),s=read(),ans=0;
    for(ll i=0;i<m;i++){
        ll u=read(),v=read();
        edg[u].push_back(v);
        //edg[v].push_back(u);
    }
    for(ll i=1;i<=n;i++) dist[i]=INT_MAX;
    queue<ll> q;
    q.push(s);
    visited[s]=1;
    dist[s]=0;
    while(!q.empty()){
        for(auto it : edg[q.front()]){
            if(!visited[it]){
                visited[it]=1;
                q.push(it);
                dist[it]=dist[q.front()]+1;
            }
        }
        q.pop();
    }
    for(ll i=1;i<=n;i++)
        fout<<(dist[i]==INT_MAX?-1:dist[i])<<" \n"[i==n];
    return 0;
}