Pagini recente » Cod sursa (job #279156) | Cod sursa (job #1802401) | Cod sursa (job #1397665) | Cod sursa (job #3263438) | Cod sursa (job #1018004)
#include<cstdio>
#include<queue>
#include<vector>
#define N_MAX 100010
using namespace std;
vector <int> G[N_MAX];
int pas[N_MAX];
bool sel[N_MAX];
inline void bf(int x)
{
int loc=1,p;
queue <int> Q;
vector <int> :: iterator it;
Q.push(x);
while (!Q.empty())
{
x=Q.front();
for (it=G[x].begin();it<G[x].end();it++)
if (!sel[*it])
{
sel[*it]=true;
Q.push(*it);
pas[*it]=pas[x]+1;
}
loc++;
Q.pop();
}
return ;
}
inline void afis(int n)
{
int i;
for (i=1;i<=n;i++)
printf("%d ",pas[i]);
printf("\n");
}
inline void load()
{
int n,m,k,i,x,y;
scanf("%d%d%d",&n,&m,&k);
for (i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
G[x].push_back(y);
}
sel[k]=true;
bf(k);
for (i=1;i<=n;i++)
if (pas[i]==0 && i!=k) pas[i]=-1;
afis(n);
return;
}
int main()
{
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
load();
fclose(stdin);
fclose(stdout);
return 0;
}