Pagini recente » Cod sursa (job #1294182) | Cod sursa (job #75411) | Cod sursa (job #963029) | Cod sursa (job #2197206) | Cod sursa (job #1754735)
#include<iostream>
#include<list>
#include<queue>
#include<algorithm>
using namespace std;
int n,m,s,cost[100001],vizit[100001];
list<int> a[100001];
queue<int> q;
void dfs(int i){
q.push(i);
vizit[i]=1;
while(q.size()!=0){
int p=q.front();
q.pop();
for(list<int>::iterator it=a[p].begin();it!=a[p].end();){
if(cost[*it]!=0&&cost[*it]<=cost[p]) ;
else if(i!=*it){
if(!vizit[*it])
q.push(*it);
vizit[i]=1;
cost[*it]=cost[p]+1;
}
a[p].erase(it++);
}
}
for(int j=1;j<=n;j++){
if(cost[j]==0&&i!=j)printf("-1 ");
else printf("%d ",cost[j]);
}
};
int main(){
freopen("bfs.in", "r", stdin);
freopen("bfs.out", "w", stdout);
int n1,n2;
scanf("%d %d %d",&n,&m,&s);
for(int i=1;i<=m;i++){
scanf("%d %d",&n1,&n2);
a[n1].push_back(n2);
}
dfs(s);
}