Pagini recente » Cod sursa (job #693635) | Cod sursa (job #2109162) | Cod sursa (job #1710625) | Cod sursa (job #865367) | Cod sursa (job #1468569)
#include<iostream>
#include<fstream>
#include<cmath>
#include<algorithm>
#include<vector>
#include<bitset>
#include<cstring>
#include<queue>
#define ull unsigned long long
#define ll long long
#define pb push_back
#define FOR(a,b,c) for (int a=b;a<=c; ++a)
#define ROF(a,b,c) for (int a=b;a>=c; --a)
using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");
int N,M,S;
int rez[100010];
vector<int> v[100010];
bitset<100010> verif;
struct elem {
int nod,val=0;
};
queue<elem> Q;
void BFS();
int main()
{
f>>N>>M>>S;
FOR (i,1,M) {
int x,y;
f>>x>>y;
v[x].pb(y);
}
elem da;
da.nod=S;
Q.push(da);
verif.set(S,1);
BFS();
FOR (i,1,N) {
if (rez[i]==0 && i!=S) {
g<<"-1 ";
}
else {
g<<rez[i]<<' ';
}
}
f.close();g.close();
return 0;
}
void BFS() {
while (!Q.empty()) {
elem A=Q.front();
Q.pop();
for (unsigned int k=0;k<v[A.nod].size();++k) {
if (!verif.test(v[A.nod][k])) {
verif.set(v[A.nod][k],1);
elem B;
B.nod=v[A.nod][k];
B.val=A.val+1;
rez[B.nod]=B.val;
Q.push(B);
}
}
}
}