Pagini recente » Cod sursa (job #1611101) | Cod sursa (job #2534713) | Cod sursa (job #3234911) | Cod sursa (job #1577781) | Cod sursa (job #710722)
Cod sursa(job #710722)
#include <cstdio>
#include <vector>
#include <queue>
#include <cstring>
using namespace std;
#define nmax 101000
class graf{
public:
vector<int> adj[nmax];
void add(int a, int b);
};
void graf::add(int a, int b){
adj[a].push_back(b);
}
graf G;
int N,M,a,b,nr,S;
int viz[nmax];
int C[nmax];
void dfs(int nod){
if (viz[nod])
return ;
viz[nod]=1;
vector<int> :: iterator it;
for (it=G.adj[nod].begin();it!=G.adj[nod].end();++it)
if (!viz[*it])
dfs(*it);
}
void bfs(int nod){
queue<int> Q;
vector<int> :: iterator it;
Q.push(nod);
viz[nod]=1;
while(!Q.empty()){
int x=Q.front();
Q.pop();
for (it=G.adj[x].begin();it!=G.adj[x].end();++it)
if (!viz[*it]){
viz[*it]=1;
Q.push(*it);
C[*it]=C[x]+1;
}
}
}
int main(){
int i;
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
scanf("%d %d %d", &N, &M, &S);
while(M--){
scanf("%d %d", &a, &b);
G.add(a,b);
//G.add(b,a);
}
/*nr=0;
for (i=1;i<=N;++i)
if (!viz[i]){
nr++;
dfs(i);
}
printf("%d\n", nr);
*/
memset(viz,0,sizeof(viz));
bfs(S);
for (i=1;i<=N;++i)
if (C[i]==0)
C[i]=-1;
C[S]=0;
for (i=1;i<=N;++i)
printf("%d ", C[i]);
return 0;
}