Pagini recente » Cod sursa (job #2190617) | Cod sursa (job #393690) | Cod sursa (job #2846021) | Cod sursa (job #1648072) | Cod sursa (job #3149269)
#include <bits/stdc++.h>
#define cin fin
#define cout fout
using namespace std;
ifstream fin ("bfs.in");
ofstream fout ("bfs.out");
int vf[100001], ans;
bool ok = false;
map <int, vector<int>> adj;
queue <int> nxt;
queue <int> nxt2;
class graph {
public:
void addEdge(int x, int y) {
adj[x].push_back(y);
}
void bfs(int st, int src);
};
void graph::bfs(int st, int src) {
if(!nxt.empty())
nxt.pop();
vf[st] = 1;
for(auto x : adj[st]) {
if(!vf[x])
nxt2.push(x);
if(x == src) {
ok = true;
vf[st] = 0;
return;
}
}
if(ok) {
vf[st] = 0;
return;
}
if(nxt.empty()) {
ans++;
swap(nxt, nxt2);
}
if(nxt.empty())
return;
bfs(nxt.front(), src);
vf[st] = 0;
}
int main()
{
int n, m, s, x, y;
graph g;
cin >> n >> m >> s;
for(int i = 1; i <= m; i++) {
cin >> x >> y;
g.addEdge(x, y);
}
for(int i = 1; i <= n; i++) {
ans = 0;
ok = false;
if(s != i)
g.bfs(s, i);
while(!nxt.empty() || !nxt2.empty()) {
if(!nxt.empty())
nxt.pop();
if(!nxt2.empty())
nxt2.pop();
}
if(ok)
cout << ans+1 << ' ';
else if(s == i)
cout << "0 ";
else
cout << -1 << ' ';
}
return 0;
}