Pagini recente » Cod sursa (job #1461322) | Cod sursa (job #1076813) | Cod sursa (job #310729) | Cod sursa (job #2511367) | Cod sursa (job #2954742)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll NMAX=2e5+5,buffsize=1<<13;
FILE* fin;
char buff[buffsize];
int buffpos=buffsize;
int read(){
if(buffpos==buffsize) fread(buff,1,buffsize,fin),buffpos=0;
int n=0;
while(buff[buffpos]<'0' || buff[buffpos]>'9'){
++buffpos;
if(buffpos==buffsize) fread(buff,1,buffsize,fin),buffpos=0;
}
while(buff[buffpos]>='0' && buff[buffpos]<='9'){
n=(n<<1)+(n<<3)+(buff[buffpos]^48);
++buffpos;
if(buffpos==buffsize) fread(buff,1,buffsize,fin),buffpos=0;
}
return n;
}
typedef long long ll;
vector<ll> edg[NMAX];
bool visited[NMAX];
ll dist[NMAX];
void dfs(ll u){
visited[u]=1;
for(ll i=0;i<edg[u].size();i++){
if(!visited[edg[u][i]])
dfs(edg[u][i]);
}
}
int main(){
fin = fopen("bfs.in","r");
ofstream fout("bfs.out");
ll n=read(),m=read(),s=read(),ans=0;
for(ll i=0;i<m;i++){
ll u=read(),v=read();
edg[u].push_back(v);
//edg[v].push_back(u);
}
for(ll i=1;i<=n;i++) dist[i]=INT_MAX;
queue<ll> q;
q.push(s);
visited[s]=1;
dist[s]=0;
while(!q.empty()){
for(auto it : edg[q.front()]){
if(!visited[it]){
visited[it]=1;
q.push(it);
dist[it]=dist[q.front()]+1;
}
}
q.pop();
}
for(ll i=1;i<=n;i++)
fout<<(dist[i]==INT_MAX?-1:dist[i])<<" \n"[i==n];
return 0;
}