Cod sursa(job #2907906)

Utilizator dgivanDan Grigore Ivan dgivan Data 31 mai 2022 22:05:20
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.12 kb
#include<iostream>
#include<set>
#include<algorithm>
#include <vector>
#include <fstream>
#include <cstring>
#include <map>
#include <math.h>
#include <queue>

using namespace std;



class InParser {
private:
    FILE *fin;
    char *buff;
    int sp;

    char read_ch() {
        ++sp;
        if (sp == 4096) {
            sp = 0;
            fread(buff, 1, 4096, fin);
        }
        return buff[sp];
    }

public:
    InParser(const char* nume) {
        fin = fopen(nume, "r");
        buff = new char[4096]();
        sp = 4095;
    }

    InParser& operator >> (int &n) {
        char c;
        while (!isdigit(c = read_ch()) && c != '-');
        int sgn = 1;
        if (c == '-') {
            n = 0;
            sgn = -1;
        } else {
            n = c - '0';
        }
        while (isdigit(c = read_ch())) {
            n = 10 * n + c - '0';
        }
        n *= sgn;
        return *this;
    }

    InParser& operator >> (long long &n) {
        char c;
        n = 0;
        while (!isdigit(c = read_ch()) && c != '-');
        long long sgn = 1;
        if (c == '-') {
            n = 0;
            sgn = -1;
        } else {
            n = c - '0';
        }
        while (isdigit(c = read_ch())) {
            n = 10 * n + c - '0';
        }
        n *= sgn;
        return *this;
    }
};

int n, m, s;
vector<int> v[100111];
vector<int> viz(100111);
vector<int> dist(100111);

int main (){

    InParser cin ("bfs.in");
    ofstream cout ("bfs.out");

    cin >> n >> m >> s;

    for (int i = 1; i<=m; i++){
        int a, b;
        cin >> a >> b;
        v[a].push_back(b);
    }

   queue<int> q;
    q.push(s);
    viz[s] = 1;
    dist[s] = 0;
    while (!q.empty()){
        int nod = q.front();
        q.pop();
        for (int i = 0; i<v[nod].size(); i++){
            int vecin = v[nod][i];
            if (!viz[vecin]){
                q.push(vecin);
                dist[vecin] = dist[nod]+1;
                viz[vecin] = 1;
            }
        }
    }

    for (int i = 1; i<=n; i++){
        if (!viz[i]){
            cout << -1 << " ";
        }
        else {
            cout << dist[i] << " ";
        }
    }
}