Pagini recente » Cod sursa (job #811733) | Cod sursa (job #990554) | Cod sursa (job #2698826) | Cod sursa (job #3144300) | Cod sursa (job #2192451)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
class InputReader
{
public:
static const int BUFF_SIZE = 1 << 17;
FILE *fin;
int bp;
char buff[BUFF_SIZE];
InputReader (const char *file_name)
{
fin = fopen(file_name, "r");
bp = BUFF_SIZE - 1;
}
void adv()
{
if (++bp == BUFF_SIZE)
{
fread(buff, sizeof(char), BUFF_SIZE, fin);
bp = 0;
}
}
InputReader& operator >> (int& num)
{
num = 0;
while (isdigit(buff[bp]) == false)
adv();
while (isdigit(buff[bp]))
{
num = num * 10 + buff[bp] - '0';
adv();
}
return *this;
}
};
InputReader fin("bfs.in");
ofstream fout("bfs.out");
const int MAXN = 100005;
vector < int > v[MAXN];
queue < int > Q;
int dist[MAXN];
void bfs()
{
int nod, vecin;
while (!Q.empty())
{
nod = Q.front();
Q.pop();
for (auto &it : v[nod])
{
if (dist[it] == -1)
{
Q.push(it);
dist[it] = dist[nod] + 1;
}
}
}
}
int main()
{
int n, m, i, nod, x, y;
fin >> n >> m >> nod;
for (i = 1; i <= m; ++i)
{
fin >> x >> y;
v[x].push_back(y);
}
for (i = 1; i <= n; ++i)
{
dist[i] = -1;
}
dist[nod] = 0;
Q.push(nod);
bfs();
for (i = 1; i <= n; ++i)
{
fout << dist[i] << ' ';
}
fout << '\n';
return 0;
}