Pagini recente » Rating Baciu Ancuta (ab_ank_1) | Borderou de evaluare (job #601257) | Rezultatele filtrării | Cod sursa (job #1198561)
#include <cstdio>
int v[100001];
int c[100001];
int lst[2000005];
int urm[2000005];
int vf[2000005];
int nr;
int n;
FILE *in,*out;
void ad(int x,int y)
{
nr++;
vf[nr]=y;
urm[nr]=lst[x];
lst[x]=nr;
}
void bfs(int x)
{
int p=1,u=1,i,poz,a=0,cu;
c[p]=x;
for(i=p;i<=u;i++)
{
a++;
poz=lst[c[i]];
while(poz!=0)
{
if(v[vf[poz]]==0)
{
u++;
c[u]=vf[poz];
v[vf[poz]]=a;
}
poz=urm[poz];
}
}
p++;
}
int main()
{
in=fopen("bfs.in","r");
out=fopen("bfs.out","w");
int m,i,x,y,s;
fscanf(in,"%d%d%d",&n,&m,&s);
nr=0;
for(i=1;i<=m;i++)
{
fscanf(in,"%d%d",&x,&y);
if(x!=y)
ad(x,y);
}
bfs(s);
for(i=1;i<=n;i++)
{
if(v[i]>=1 && i!=s)
fprintf(out,"%d ",v[i]);
if(i==s)
fprintf(out,"0 ");
if(v[i]==0 && i!=s)
fprintf(out,"-1 ");
}
return 0;
}