Cod sursa(job #229770)

Utilizator andrei-alphaAndrei-Bogdan Antonescu andrei-alpha Data 11 decembrie 2008 15:47:25
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
using namespace std;

#include <cstdio>
#include <vector>
#include <algorithm>

#define N_MAX 1<<18
#define IN  "bfs.in"
#define OUT "bfs.out"
#define f first
#define s second
#define II inline
#define FOR(i,a,b) for(int i=a;i<=b;++i)
#define pb push_back

typedef vector<int> VI;
vector< VI > A(N_MAX);
int N,M,S;
int C[N_MAX];
bool viz[N_MAX];

II void scan()
{
	freopen(IN,"r",stdin);
	freopen(OUT,"w",stdout);
	scanf("%d%d%d\n",&N,&M,&S);
	
	int x,y;
	FOR(i,1,M)
	{
		scanf("%d%d\n",&x,&y);
		A[x].pb( y );
	}	
}

II void BF(int nod)
{
	vector<int> stv;
	stv.pb( nod );
	viz[nod] = true;
	FOR(i,0,(int)stv.size()-1)
	{
		nod = stv[i]; 
		int l = A[nod].size()-1;
		
		FOR(j,0,l)
		{
			int next = A[nod][j];
			if(!viz[next])	
			{
				viz[next] = true;
				C[next] = C[nod] + 1;
				stv.pb( next );
			}	
		}
	}	
}	
	
II void solve()
{
	BF(S);
	FOR(i,1,N)
	{
		if(!viz[i])
			printf("-1 ");
		else
			printf("%d ",C[i]);
	}	
}

int main()
{
	scan();
	solve();
	return 0;
}