Cod sursa(job #1232655)

Utilizator rebound212Mihnea Savu rebound212 Data 23 septembrie 2014 17:02:06
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <cstdio>
#include <vector>
#include <cstring>
#define pb push_back
using namespace std;
vector <int> g[1000001];
int lg[1000001],q[1000001],i,s,n,x,y,m;
bool sel[1000001];
void dfs(int x)
{
    int p,u,nod,i;
    sel[x]=true;
    p=1;
    u=1;
    q[p]=x;
    lg[x]=0;
    while(p<=u)
    {
        nod=q[p];
        while(!g[nod].empty())
        {
            if(sel[g[nod].back()]==false)
            {
                q[++u]=g[nod].back();
                sel[g[nod].back()]=true;
                lg[g[nod].back()]=lg[nod]+1;
                g[nod].pop_back();
            }
            else
            {
                g[nod].pop_back();
            }

        }
        p++;

    }

}

int main()
{
    freopen("bfs.in","r",stdin);
    freopen("bfs.out","w",stdout);
    scanf("%d %d %d",&n,&m,&s);
    for(i=1; i<=m; i++)
    {
        scanf("%d %d",&x,&y);
        g[x].pb(y);
    }
     memset(lg, -1, sizeof(lg));
    dfs(s);

    for(i=1;i<=n;i++)
    {
        printf("%d ",lg[i]);
    }

    return 0;
}