Pagini recente » Cod sursa (job #1942993) | Cod sursa (job #976734) | Cod sursa (job #256148) | Cod sursa (job #2750929) | Cod sursa (job #2103878)
#include <bits/stdc++.h>
using namespace std;
int vertices, edges, u, v, start, cost[100001];
vector<int> adj[100001];
constexpr int kBuffSize = (1 << 17);
inline char GetChar()
{
static char buff[kBuffSize];
static int pointer = kBuffSize;
if(pointer == kBuffSize)
{
fread(buff, 1, kBuffSize, stdin);
pointer = 0;
}
return buff[pointer++];
}
inline int get_nr()
{
int number = 0;
char c = GetChar();
while(c < 48 | c > 57) c = GetChar();
while (c > 47 & c < 58)
number = number * 10 + c - '0',
c = GetChar();
return number;
}
void BFS(int start)
{
queue<int> q;
q.push(start);
while(!q.empty())
{
int current = q.front(); q.pop();
for(int child : adj[current])
{
if(cost[child] == 0)
{
q.push(child);
cost[child] = cost[current] + 1;
}
}
}
}
int main(){
freopen("bfs.in", "r", stdin);
freopen("bfs.out", "w", stdout);
vertices = get_nr(); edges = get_nr(); start = get_nr();
for(int i = 1; i <= edges; i++)
{
u = get_nr(); v = get_nr();
adj[u].push_back(v);
}
cost[start] = 1; BFS(start);
for(int i = 1; i <= vertices; i++)
{
printf("%d ", cost[i] - 1);
}
return 0;
}