Cod sursa(job #3335932)

Utilizator edimogaMoga Edi edimoga Data 23 ianuarie 2026 21:25:46
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.75 kb
#include  <fstream>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
const int NMAX = 1e5;
// bool havelHakimi(int deg[NMAX+1], int m) {
//
//     int sum=0;
//     for (int i=0; i<m; i++) {
//         sum+=deg[i];
//         if (deg[i]>=m) return false;
//         if (deg[i]<0) return false;
//     }
//     if ( sum%2 ==1 ) return false;
//     sort(deg, deg+m, greater<int>());
//     for (int i=0; i<m; i++) {
//         int t=deg[i];
//         if (t > m-i-1) return false;
//         for (int j=i+1; j<i+t+1; j++) {
//             deg[j]--;
//             if (deg[j]<0) return false;
//         }
//         deg[i]=0;
//         if (deg[i]>0 ) return false;
//         sort(deg, deg+m, greater<int>());
//     }
//     return true;
// }


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

int main () {
    // int n, m;
    // in>>n;
    // for (int i=0; i<n; i++) {
    //     in>>m;
    //     int deg[100001];
    //     for (int j=0; j<m; j++) {
    //         in>>deg[j];
    //     }
    //     int ok=havelHakimi(deg, m);
    //
    //     if (ok==1) out<<"POSSIBLE"<<endl;
    //     else out<<"IMPOSSIBLE"<<endl;
    // }

    int n,m,a,b,s;
    in>>n>>m>>s;
    vector<vector<int> > adj(n+1);

    for (int i=0; i<m; i++) {
        in>>a>>b;
        adj[a].push_back(b);
    }
    vector<int> dist(n+1, -1);
    queue<int> q;
    dist[s]=0;
    q.push(s);

    while(!q.empty()) {
        int u=q.front();
        q.pop();
        for ( auto i : adj[u]) {
            if (dist[i]==-1) {
                dist[i]=dist[u]+1;
                q.push(i);
            }
        }
    }

    for ( int i=1; i<=n; i++ ) {
        out<<dist[i]<<" ";
    }
    return 0;
}