Pagini recente » Cod sursa (job #1230481) | Cod sursa (job #2055891) | Cod sursa (job #2598949) | Cod sursa (job #1519985) | Cod sursa (job #1754693)
#include<iostream>
#include<list>
#include<queue>
#include<algorithm>
using namespace std;
int n,m,s,c,cost[100001];
list<int> a[100001];
queue<int> q;
int min(int a,int b){return a>b?b:a;}
void dfs(int i){
c=0;
q.push(i);
while(q.size()!=0){
int p=q.front();
q.pop();
c++;
for(list<int>::iterator it=a[p].begin();it!=a[p].end();){
q.push(*it);
if(*it==i)cost[i]=0;
else if(cost[*it]!=0&&cost[*it]<=cost[p]) ;
else cost[*it]=min(cost[p]+1,c);
a[p].erase(it++);
}
}
for(int j=1;j<=n;j++){
if(i==j)cout<<0<<" ";
else if(cost[j]==0)cout<<-1<<" ";
else cout<<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);
}