Pagini recente » Cod sursa (job #2282719) | Cod sursa (job #2147715) | Cod sursa (job #2890188) | Cod sursa (job #2738207) | Cod sursa (job #2237791)
#include <bits/stdc++.h>
#define INF 10000001
using namespace std;
class Reader {
public:
Reader() {}
Reader(const char *file_name) {
input_file = fopen(file_name, "r");
cursor = 0;
fread(buffer, SIZE, 1, input_file);
}
inline Reader &operator >>(int &n) {
while(buffer[cursor] < '0' || buffer[cursor] > '9') {
advance();
}
n = 0;
while('0' <= buffer[cursor] && buffer[cursor] <= '9') {
n = n * 10 + buffer[cursor] - '0';
advance();
}
return *this;
}
private:
FILE *input_file;
static const int SIZE = 1 << 17;
int cursor;
char buffer[SIZE];
inline void advance() {
++ cursor;
if(cursor == SIZE) {
cursor = 0;
fread(buffer, SIZE, 1, input_file);
}
}
};
int num_nodes;
int num_edges;
int start;
vector<vector <int>> adj(100001);
vector<int> dist(100001);
int main() {
Reader fin("bfs.in");
ofstream fout("bfs.out");
fin>>num_nodes>>num_edges>>start;
for(int i=1; i<=num_edges; i++) {
int src,dest;
fin>>src>>dest;
adj[src].push_back(dest);
}
fill(dist.begin(), dist.end(), INF);
queue <int> bfs;
bfs.push(start);
dist[start]=0;
while(!bfs.empty()) {
int current=bfs.front();
bfs.pop();
for(auto next:adj[current])
if(dist[current]+1<dist[next]) {
bfs.push(next);
dist[next]=dist[current]+1;
}
}
for(int i=1; i<=num_nodes; i++)
if(dist[i]==INF)
fout<<"-1 ";
else
fout<<dist[i]<<' ';
return 0;
}