Pagini recente » Cod sursa (job #689739) | Cod sursa (job #606237) | Cod sursa (job #689726) | Cod sursa (job #360097) | Cod sursa (job #427622)
Cod sursa(job #427622)
#include <iostream>
#include <cstring>
#include <vector>
#include <cstdio>
#include <algorithm>
using namespace std;
void open(){
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
};
#define pb push_back
#define sz size()
#define MAXN 100010
const int oo=(int)1e9;
int n,m,c,a,b,head,tail,q[MAXN],mat[MAXN];
bool used[MAXN];
vector<int>g[MAXN];
int main(){
open();
scanf("%d%d%d",&n,&m,&c);
for (int i=0;i<m;i++){
scanf("%d%d",&a,&b);
g[a].pb(b);
}
head=tail=0;
q[tail++]=c;
for (int i=1;i<=n;i++) mat[i]=oo;
mat[c]=0;
used[c]=1;
while (head<tail){
int top=q[head++];
for (vector<int>::iterator it=g[top].begin();it!=g[top].end();it++){
if (used[*it]) continue;
used[*it]=1;
mat[*it]=mat[top]+1;
q[tail++]=*it;
}
}
for (int i=1;i<=n;i++){
if (i>1) printf(" ");
if (mat[i]==oo) mat[i]=-1;
printf("%d",mat[i]);
}
printf("\n");
return 0;
}