Pagini recente » Cod sursa (job #1989682) | Cod sursa (job #2479864) | Cod sursa (job #1952164) | Cod sursa (job #1399704) | Cod sursa (job #262075)
Cod sursa(job #262075)
#include<stdio.h>
#define max 100000
long s[max], x[max], t[max], d[max], n;
struct elem
{ long vf;
elem *urm;
} *a[max], *q;
FILE *f, *g;
void read()
{ long i, k, l;
f=fopen("cerere.in", "r");
fscanf(f, "%ld", &n);
for(i=1; i<=n; i++)
fscanf(f, "%ld", &t[i]);
for(i=1; i<=n; i++)
{ fscanf(f, "%ld%ld", &k, &l);
q=new elem;
d[l]=1;
q->vf=l;
q->urm=a[k];
a[k]=q;
}
}
void solve(long k)
{ long z, y, nr;
z=s[k]; y=z;
nr=0;
while(t[z]!=0)
{ k-=t[z];
z=s[k];
nr++;
}
x[y]=nr;
}
void df(long z, long k)
{ elem *q;
s[k]=z;
solve(k);
q=a[z];
while(q)
{ df(q->vf, k+1);
q=q->urm;
}
}
int main()
{ long i;
read();
for(i=1; i<=n; i++)
if(d[i]==0)
df(i, 1);
g=fopen("cerere.out", "w");
for(i=1; i<=n; i++)
fprintf(g, "%ld ", x[i]);
fprintf(f, "\n");
fclose(g);
return 0;
}