Pagini recente » Cod sursa (job #41656) | Cod sursa (job #166170) | Cod sursa (job #1246371) | Cod sursa (job #59569) | Cod sursa (job #712802)
Cod sursa(job #712802)
#include<cstdio>
#define nmax 100005
typedef struct Lnod{
int v;
struct Lnod *next;
}*nod;
nod a[nmax];
int nr[nmax],rs[nmax],n,k,i;
void readdata(){
freopen("cerere.in","r",stdin);
int x,y; nod p;
scanf("%d\n",&n);
for(int i=1;i<=n;++i)scanf("%d ",&nr[i]);
while(!feof(stdin)){
scanf("%d %d\n",&x,&y);
p = new Lnod;
p->v=x;
p->next=a[y];
a[y]=p;
}
fclose(stdin);
}
void scrie(){
freopen("cerere.out","w",stdout);
for(int i=1;i<=n;++i)printf("%d ",rs[i]);
fclose(stdout);
}
void bfs(int nod1){
nod p;
if(k==0){
if(!nr[nod1])rs[i]++;
else {
k=nr[nod1];
rs[i]++;
}
}
if(k){
for(p=a[nod1]; p; p=p->next){ k--; bfs(p->v); }
}
}
int main(void){
readdata();
for(i=1;i<=n;++i)
if(nr[i]){
k=nr[i];
bfs(i);
}
else rs[i]=0;
scrie();
return 0;
}