Pagini recente » Monitorul de evaluare | Cod sursa (job #1280868) | Cod sursa (job #1127848) | Cod sursa (job #284883) | Cod sursa (job #2756798)
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
vector<vector<int>> Graph;
vector<int> dist;
int N, M, S;
const int INF = 0x3f3f3f3f;
void BFS(int k) {
queue<int> Q;
Q.push(k);
dist.resize(N, INF);
dist[k] = 0;
while(!Q.empty()) {
k = Q.front(); Q.pop();
for (auto it: Graph[k])
if (dist[it] == INF) {
dist[it] = dist[k] + 1;
Q.push(it);
}
}
for (auto it: dist)
if (it != INF)
printf("%d ", it);
else
printf("-1 ");
}
int main()
{
freopen("bfs.in", "r", stdin);
freopen("bfs.out", "w", stdout);
scanf("%d%d%d", &N, &M, &S);
--S;
Graph.resize(N);
for (int i = 0; i < M; ++i) {
int from, to;
scanf("%d%d", &from, &to);
--from; --to;
Graph[from].emplace_back(to);
}
BFS(S);
return 0;
}