Cod sursa(job #863496)

Utilizator AlexandruValeanuAlexandru Valeanu AlexandruValeanu Data 23 ianuarie 2013 21:04:27
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
#include <bitset>

using namespace std;

#define Nmax 100001

bitset <Nmax> viz;
vector <int> Graf[Nmax];
queue <int> Q;

int dist[Nmax];

int N, M, R;
int a, b;

void citire(){

    freopen("bfs.in", "r", stdin);

    scanf("%d %d %d", &N, &M, &R);

    for(; M; M--){

        scanf("%d %d", &a, &b);

        Graf[a].push_back(b);
    }
}

void init(){

    dist[R] = 0;
    Q.push(R);
    viz[R] = 1;
}

void bfs(){

    while(!Q.empty()){

        int current = Q.front();
        Q.pop();

        vector <int> ::iterator it;

        for(it = Graf[current].begin(); it != Graf[current].end(); ++it)
            if(!viz[*it]){

                dist[*it] = dist[current] + 1;
                viz[*it] = 1;
                Q.push(*it);
            }
    }

    for(int i = 1; i <= N; i++)
        if(dist[i] == 0 && i != R)
            dist[i] = -1;
}

void afis(){

    freopen("bfs.out", "w", stdout);

    for(int i = 1; i<= N; i++)
        printf("%d ", dist[i]);
}

int main(){

    citire();
    init();
    bfs();
    afis();

    return 0;
}