Pagini recente » Cod sursa (job #2419840) | pre_oni_gim2015 | Cod sursa (job #575049) | Cod sursa (job #2457048) | Cod sursa (job #1337158)
#include <cstdio>
#include <iostream>
#include <list>
#include <map>
#include <vector>
#include <utility>
#include <deque>
#define NMAX 100000
using namespace std;
vector<int> arcs[NMAX];
int distances[NMAX]{0};
int n,s,m;
int readInt()
{
int n=0;
char c=getchar();
while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9')
{
n=(n<<1)+(n<<3)+c-'0';
c=getchar();
}
return n;
}
void Bfs(int s,int n)
{
deque<int> fifo;
vector<int>::iterator it;
fifo.push_back(s);
distances[s]=1;
while(!fifo.empty())
{
int p=fifo.front();
it=arcs[p].begin();
while(it!=arcs[p].end())
{
if(!distances[*it])
{
fifo.push_back(*it);
distances[*it]=distances[p]+1;
}
it++;
}
fifo.pop_front();
}
}
void ReadFile()
{
freopen("bfs.in","r",stdin);
int a,b;
n=readInt();
m=readInt();
s=readInt();
for(int i=1; i<=m; ++i)
{
a=readInt();
b=readInt();
arcs[a].push_back(b);
}
}
void Write()
{
freopen("bfs.out","w",stdout);
for(int i=1; i<=n; ++i)
{
printf("%d ",distances[i] -1);
}
printf("\n");
}
int main()
{
ReadFile();
Bfs(s,n);
Write();
return 0;
}