Pagini recente » Cod sursa (job #1096453) | Cod sursa (job #2734605) | Cod sursa (job #2323107) | Cod sursa (job #1337837) | Cod sursa (job #631762)
Cod sursa(job #631762)
#include <cstdio>
#include <cstring>
#define smeu 100003
using namespace std;
int N,M,S;
int c[smeu];
int a[10000][10000];
int viz[smeu];
/*
2 ≤ N ≤ 100 000
1 ≤ M ≤ 1 000 000
Daca nu se poate ajunge din nodul S la nodul i, atunci numarul corespunzator numarului i va fi -1.
*/
void citire()
{
freopen("bfs.in","r",stdin);
scanf("%d %d %d",&N,&M,&S);
for(int i=1;i<=M;++i)
{
int x,y;
scanf("%d %d",&x,&y);
a[x][y]=1;
}
}
void golire(int x[])
{
for(int i=0;i<=100000; ++i)
x[i]=0;
}
void afisare()
{
for(int i=1;i<=N;++i)
{
for(int j=1;j<=N;++j)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
}
int latime(int vf,int x)
{
int nr=0;
c[0]=vf;
viz[vf]=1;
int u=1;
if(vf == x)
return 0;
for(int p=0;p<u;++p)
{
for(int j=x;j<=N;++j)
{
if(a[c[p]][j]==1 && !viz[j])
{
c[u++]=j;
viz[j]=1;
nr++;
if(x == j)
return nr;
}
}
}
return -1;
}
void alt_ceva()
{
for(int i=1;i<=N; ++i)
{
golire(viz);
printf("%d ",latime(S,i));
}
printf("\n");
}
int main()
{
freopen("bfs.out","w",stdout);
citire();
//afisare();
alt_ceva();
return 0;
}