Pagini recente » Cod sursa (job #2071662) | Cod sursa (job #268584) | Cod sursa (job #712537) | Cod sursa (job #1306141) | Cod sursa (job #295748)
Cod sursa(job #295748)
#include <stdio.h>
#include <stdlib.h>
FILE *f=fopen("cerere.in","r"),*g=fopen("cerere.out","w");
int v[100001],n,*gr[100001],q[100001],who[100001],rez[100001];
void citire(){
int i,a,b;
fscanf(f,"%d",&n);
for(i=1;i<=n;i++){
fscanf(f,"%d",&v[i]);
gr[i]=(int*)realloc(gr[i],sizeof(int));
gr[i][0]=0;
who[i]=1;
}
for(i=0;i<n;++i){
fscanf(f,"%d%d",&a,&b);
gr[a][0]++;
gr[a]=(int*)realloc(gr[a],sizeof(int)*(gr[a][0]+1));
gr[a][gr[a][0]]=b;
}
}
void df(){
int p=1,x,y;
q[1]=1;
while(p>0){
x=q[p];
if(who[x]<=gr[x][0]){
q[++p]=gr[x][who[x]];
who[x]++;
y=q[p];
if(v[y])rez[y]=rez[q[p-v[y]]]+1;
}
else
p--;
}
}
int main(){
int i;
citire();
df();
for(i=1;i<=n;i++)fprintf(g,"%d ",rez[i]);
fclose(f);
fclose(g);
}