Pagini recente » Cod sursa (job #376457) | Cod sursa (job #3261538) | Cod sursa (job #1221959) | Statisticile problemei Petrecere | Cod sursa (job #228473)
Cod sursa(job #228473)
#include <cstdio>
#include <string>
#define N 100001
#define DIM 8192
char ax[DIM];
int pz;
inline void cit(int &x)
{
x=0;
while(ax[pz]<'0' || ax[pz]>'9')
if(++pz==DIM)fread(ax,1,DIM,stdin),pz=0;
while(ax[pz]>='0' && ax[pz]<='9')
{
x=x*10+ax[pz]-'0';
if(++pz==DIM)fread(ax,1,DIM,stdin),pz=0;
}
}
struct nod { int x; nod *n;};
nod *a[N];
int n, m,S;
int d[N];
inline void add(int i, int j)
{
nod *p=new nod;
p->x=j;
p->n=a[i];
a[i]=p;
}
void read()
{
freopen("bfs.in","r",stdin);
cit(n);cit(m);cit(S);
int p, q;
while(m--)
{
cit(p);cit(q);
add(p,q);
}
}
void solve()
{
bool use[N];
int Q[N], p=0, q=0,u,i;
memset(use, 0, sizeof(use));
memset(d, 0x3f3f3f3f, sizeof(d));
Q[0]=S;
use[S]=1;
d[S]=0;
nod *it;
while(p<=q)
{
u=Q[p++];
for(it=a[u]; it; it=it->n)
if(!use[it->x])
{
Q[++q]=it->x;
use[it->x]=1;
d[it->x]=d[u]+1;
}
}
freopen("bfs.out","w",stdout);
for(i=1;i<=n;++i) if(d[i]==0x3f3f3f3f) d[i]=-1;
for(i=1;i<=n;++i)printf("%d ", d[i]);
}
int main()
{
read();
solve();
return 0;
}