Pagini recente » Cod sursa (job #741481) | Cod sursa (job #2367462) | Rezultatele filtrării | Cod sursa (job #2172404) | Cod sursa (job #1227762)
#include <cstdio>
#include <vector>
using namespace std;
vector<int>v[100010];
vector<int>::iterator it;
int v1[100010],sol[100010],n,m,x,y,nod,i,nr,st,dr,dist;
char vaz[100010];
int main()
{
freopen("bfs.in", "r", stdin);
freopen("bfs.out", "w", stdout);
scanf("%d%d%d",&n,&m,&nod);
for(i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
v[x].push_back(y);
}
v1[++nr]=nod;
vaz[nod]=1;
st=dr=nr;
while(st<=dr)
{
dist++;
for(i=st;i<=dr;i++)
for(it=v[v1[i]].begin();it!=v[v1[i]].end();it++)
if(!vaz[*it])
{
sol[*it]=dist;
v1[++nr]=*it;
vaz[*it]=1;
}
st=dr+1;
dr=nr;
}
for(i=1;i<=n;i++)
if(sol[i]==0 && i!=nod) printf("-1 ");
else printf("%d ",sol[i]);
return 0;
}