Cod sursa(job #2763203)

Utilizator tigaieNedelcu Ioan-Andrei tigaie Data 12 iulie 2021 14:01:55
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.35 kb
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#define FOR(i , n) for(int i = 0 ; i < (n) ; i++)
#define apare printf("apare");
#define endl "\n"
using namespace __gnu_pbds;
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int , int> pii;
////==================================================
const int inf = INT_MAX;

vector<int> adj[100011];
vector<bool> visited(100011 , false);

vector<int> bfs(int start , int n){
    queue<int> q;
    vector<int> dist(n+1 , 0);
    visited[start] = true;
    q.push(start);
    while(!q.empty()){
        int a = q.front();
        q.pop();
        for(auto it : adj[a]){
            if(!visited[it]){
                visited[it] = true;
                q.push(it);
                dist[it] = dist[a] + 1;
            }
        }
    }
    return dist;
}

signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    freopen("bfs.in" , "r" , stdin);
    freopen("bfs.out" , "w" , stdout);
    int n , m , start;
    cin >> n >> m;
    cin >> start;
    int n1 , n2;
    FOR(i , m){
        cin >> n1 >> n2;
        adj[n1].push_back(n2);
    }
    vector<int>ret = bfs(start , n);
    for(int i = 1 ; i <= n ; i++){
        if(visited[i])
            cout << ret[i] << " ";
        else
            cout << "-1 ";
    }
    return 0x0;
}