Pagini recente » Cod sursa (job #2128323) | Cod sursa (job #2662907) | Cod sursa (job #998491) | Cod sursa (job #3259193) | Cod sursa (job #560706)
Cod sursa(job #560706)
#include<stdio.h>
#include<queue.h>
#include<vector.h>
#include<algorithm>
#define dim 101000
#define pb push_back
int n,m,start,x,y;
vector <int> v[dim];
int dist[dim];
queue <int > q;
void read()
{
scanf("%d %d %d\n",&n,&m,&start);
for(int i=1 ; i<=m;i++ )
{
scanf("%d %d",&x,&y);
// printf("%d %d\n",x,y);
if ( y != start)
{
v[x].pb(y);
// printf("%d %d\n",x,y);
}
}
}
void solve ()
{
int x,y;
for(q.push(start) ;!q.empty(); q.pop() )
{
x = q.front ();
// printf("%d ",x);
for(int i=0 ; i<v[x].size() ; i++)
{
y = v[x][i];
if ( dist[y] > dist[x]+1)
{
q.push(y);
dist[y] = dist[x]+1;
// printf("%d ",y);
}
else
if ( dist[y] == 0)
{
q.push(y);
dist[y] = dist[x]+1;
// printf("%d ",y);
}
}
}
// printf("\n");
}
void afis (int a[dim])
{
for(int i=1 ; i<=n;i++)
if ( i != start && a[i] == 0 )
printf("-1 ");
else
printf("%d ",a[i]);
}
void set(int a[dim])
{
for(int i=1 ; i<=n;i++)
a[i] = dim;
}
int main ()
{
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
read();
// set (dist);
solve();
afis(dist);
return 0;
}