Cod sursa(job #504423)
#include<vector>
#include<cstdio>
using namespace std;
const char in[]="bfs.in";
const char out[]="bfs.out";
const int N = 100001;
vector<int>G[N];
int n, m, S, v[N], d[N];
void bfs(int x)
{
for(unsigned int i = 0 ; i < G[x].size() ; ++i)
if(!d[G[x][i]] || d[G[x][i]] > d[x] + 1)
{
v[++v[0]] = G[x][i];
d[G[x][i]] = d[x] + 1;
}
}
int main()
{
freopen(in,"r",stdin);
freopen(out,"w",stdout);
scanf("%d%d%d", &n, &m, &S);
for(int i = 1 ; i <= n ; ++i)
{
int x, y;
scanf("%d%d", &x, &y);
G[x].push_back(y);
}
v[++v[0]] = S;
for(int i = 1 ; i <= v[0]; ++i)
bfs(v[i]);
for(int i = 1 ; i <= n ; ++i)
if(!d[i])printf("-1 ");
else printf("%d ",d[i]);
return 0;
}