Cod sursa(job #2103878)

Utilizator inquisitorAnders inquisitor Data 10 ianuarie 2018 21:20:18
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.42 kb
#include <bits/stdc++.h>

using namespace std;

int vertices, edges, u, v, start, cost[100001];

vector<int> adj[100001];

constexpr int kBuffSize = (1 << 17);

inline char GetChar()
{
    static char buff[kBuffSize];

    static int pointer = kBuffSize;

    if(pointer == kBuffSize)
    {
        fread(buff, 1, kBuffSize, stdin);

        pointer = 0;
    }

    return buff[pointer++];
}

inline int get_nr()
{
    int number = 0;

    char c = GetChar();

    while(c < 48 | c > 57) c = GetChar();

    while (c > 47 & c < 58)

        number = number * 10 + c - '0',

        c = GetChar();

    return number;
}

void BFS(int start)
{
    queue<int> q;

    q.push(start);

    while(!q.empty())
    {
        int current = q.front(); q.pop();

        for(int child : adj[current])
        {
            if(cost[child] == 0)
            {
                q.push(child);

                cost[child] = cost[current] + 1;
            }
        }
    }
}

int main(){

    freopen("bfs.in", "r", stdin);
    freopen("bfs.out", "w", stdout);

    vertices = get_nr(); edges = get_nr(); start = get_nr();

    for(int i = 1; i <= edges; i++)
    {
        u = get_nr(); v = get_nr();

        adj[u].push_back(v);
    }

    cost[start] = 1; BFS(start);

    for(int i = 1; i <= vertices; i++)
    {
        printf("%d ", cost[i] - 1);
    }

    return 0;
}