Pagini recente » Cod sursa (job #1137700) | Cod sursa (job #1333886) | Cod sursa (job #2124969) | Cod sursa (job #1862847) | Cod sursa (job #409823)
Cod sursa(job #409823)
#include <cstdio>
#include <vector>
using namespace std;
vector <int > a[100050];
int n,m,s;
int coada[1000005];
int cost[100050];
void bfs()
{
int r=1,p;
coada[1]=s;
for (p=1;p<=r;++p)
for (int i=0;i<a[coada[p%1000000]].size();++i)
if ((a[coada[p%1000000]][i]!=s&&!cost[a[coada[p%1000000]][i]])||cost[a[coada[p%1000000]][i]]>cost[coada[p%1000000]]+1)
{
cost[a[coada[p%1000000]][i]]=cost[coada[p%1000000]]+1;
if (r>=1000000)
r=0;
coada[++r]=a[coada[p%1000000]][i];
}
}
int main()
{
freopen ("bfs.in","r",stdin);
freopen ("bfs.out","w",stdout);
scanf ("%d%d%d",&n,&m,&s);
int x,y;
for (int i=1;i<=m;++i)
{
scanf("%d%d",&x,&y);
a[x].push_back(y);
}
bfs();
for (int i=1;i<=n;++i)
{
if (cost[i]==0&&i!=s)
{
printf("%d ",-1);
continue;
}
printf("%d ",cost[i]);
}
return 0;
}