Pagini recente » Cod sursa (job #1469565) | Cod sursa (job #3263617) | Cod sursa (job #3249514) | Cod sursa (job #149366) | Cod sursa (job #228875)
Cod sursa(job #228875)
#include <cstdio>
#include <vector>
using namespace std;
int N, M, S, dist[100005], c[100005], viz[100005], n[100005];
vector <int> v[100005];
#define DIM 8192
char ax[DIM+16];
int pz;
inline void cit(int &x)
{
x=0;
while((ax[pz]<'0' || ax[pz]>'9') && (ax[pz]!='-'))
if(++pz==DIM)fread(ax, 1, DIM, stdin), pz=0;
int neg=0;
if(ax[pz]=='-')
{
neg=1;
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;
}
if(neg) x=-x;
}
void citire()
{
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
int i, x, y;
scanf("%d %d %d",&N,&M,&S);
for (i = 1; i <= M; i++)
{
cit(x); cit(y);
v[x].push_back(y);
}
for (i = 1; i <= N; i++)
{
dist[i] = -1;
n[i] = v[i].size();
}
dist[S] = 0;
}
void bfs()
{
int p, u, poz, i;
p = u = 0;
c[0] = S; viz[S] = 1;
while (p <= u)
{
poz = p % 100000;
for (i = 0; i < n[c[poz]]; i++)
if (!viz[v[c[poz]][i]])
{
u++;
c[u % 100000] = v[c[poz]][i];
dist[v[c[poz]][i]] = dist[c[poz]] + 1;
viz[v[c[poz]][i]] = 1;
}
p++;
}
}
int main()
{
citire();
bfs();
for (int i = 1; i <= N; i++) printf("%d ",dist[i]);
return 0;
}