Pagini recente » Cod sursa (job #2323555) | Cod sursa (job #2885002) | Cod sursa (job #570659) | Cod sursa (job #1398574) | Cod sursa (job #1424601)
#include <iostream>
#include <deque>
#include <vector>
#include <cstring>
#include <bitset>
#include <algorithm>
#define INF 1000010
#define ll long long
using namespace std;
int N, M, S, i , x, y, dist[100010];
vector<int> V[100010];
deque<int> Q;
bitset<100010> in_q;
int main()
{
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
scanf("%d%d%d", &N, &M, &S);
for(;M;--M)
{
scanf("%d%d", &x, &y);
V[x].push_back(y);
}
for(i = 1; i <= N; i++)
dist[i] = INF;
in_q[S] = 1;
Q.push_back(S);
dist[S] = 0;
while(!Q.empty())
{
x = Q.front();
for(vector<int>::iterator it = V[x].begin(); it != V[x].end(); it++)
if(dist[*it] > dist[x] + 1)
{
dist[*it] = dist[x] + 1;
if(!in_q[*it])
Q.push_back(*it);
in_q[*it] = 1;
}
in_q[x] = 0;
Q.pop_front();
}
for(i=1;i<=N;i++)
{
x = -1;
if(dist[i] != INF)
x = dist[i];
printf("%d ", x);
}
return 0;
}