Cod sursa(job #1142128)

Utilizator OnimushaLordTiberiu Copaciu OnimushaLord Data 13 martie 2014 15:40:31
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
# include <cstdio>
# include <algorithm>
# include <cstring>
# include <vector>
# define pb push_back
# define ed end
# define bg begin
# define N 100010

using namespace std;

int n,m,s,nr;
int x,c;
vector <int> G[N];
bool sel[N];
struct coada
{
    int x,c;
};
coada Q[N];

bool cmp(coada a, coada b)
{
    return a.x<b.x;
}
void load()
{
    int i,x,y;
    scanf("%d %d %d\n", &n, &m, &s);
    for(i=1; i<=m; ++i)
    {
        scanf("%d %d\n", &x, &y);
        if(x!=y) G[x].pb(y);
    }
}
void bf(int x)
{
    int i;
    vector <int> :: iterator it;
    i=nr=1;
    Q[nr].x=x;
    Q[nr].c=0;
    sel[x]=true;
    for(i=1; i<=nr; ++i)
    {
        x=Q[i].x;
        for(it=G[x].bg(); it!=G[x].ed(); ++it)
            if(!sel[*it])
            {
                sel[*it]=true;
                Q[++nr].x=*it;
                Q[nr].c=Q[i].c+1;
            }
    }
}
void write()
{
    int i,k=0;
    sort(Q+1,Q+nr+1,cmp);
    for(i=1; i<=n; ++i)
        if(!sel[i]) printf("-1 ");
        else printf("%d ", Q[++k].c);
}
void solve()
{
    load();
    bf(s);
    write();
}
int main()
{
    freopen("bfs.in", "r", stdin);
    freopen("bfs.out", "w", stdout);
    solve();
}