Cod sursa(job #1468569)

Utilizator BogdanisarBurcea Bogdan Madalin Bogdanisar Data 6 august 2015 13:24:57
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.32 kb
#include<iostream>
#include<fstream>
#include<cmath>
#include<algorithm>
#include<vector>
#include<bitset>
#include<cstring>
#include<queue>

#define ull unsigned long long
#define ll long long
#define pb push_back
#define FOR(a,b,c) for (int a=b;a<=c; ++a)
#define ROF(a,b,c) for (int a=b;a>=c; --a)

using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");
int N,M,S;
int rez[100010];
vector<int> v[100010];
bitset<100010> verif;

struct elem {
    int nod,val=0;
};
queue<elem> Q;

void BFS();

int main()
{
    f>>N>>M>>S;
    FOR (i,1,M) {
        int x,y;
        f>>x>>y;
        v[x].pb(y);
    }
    elem da;
    da.nod=S;
    Q.push(da);
    verif.set(S,1);
    BFS();
    FOR (i,1,N) {
        if (rez[i]==0 && i!=S) {
            g<<"-1 ";
        }
        else {
            g<<rez[i]<<' ';
        }
    }
    f.close();g.close();
    return 0;
}

void BFS() {
    while (!Q.empty()) {
        elem A=Q.front();
        Q.pop();
        for (unsigned int k=0;k<v[A.nod].size();++k) {
            if (!verif.test(v[A.nod][k])) {
                verif.set(v[A.nod][k],1);
                elem B;
                B.nod=v[A.nod][k];
                B.val=A.val+1;
                rez[B.nod]=B.val;
                Q.push(B);
            }
        }
    }
}