Pagini recente » Cod sursa (job #104297) | Cod sursa (job #3222891) | Cod sursa (job #1236769) | Cod sursa (job #1264868) | Cod sursa (job #129618)
Cod sursa(job #129618)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define NMAX 100001
#define _fin "cerere.in"
#define _fout "cerere.out"
int i,n,Gr[NMAX],C[NMAX],kStr[NMAX],T[NMAX],R,St[NMAX],Mark[NMAX],j;
int* A[NMAX];
void DF(int nod)
{
int i;
Mark[nod]=1;
St[++St[0]]=nod;
// printf("NOD DFS: %d \n",nod);
C[nod]=1 + C[St[St[0]-kStr[nod]]];
for (i=1;i<=A[nod][0];i++)
if (!Mark[A[nod][i]])
DF(A[nod][i]);
St[St[0]--]=0;
}
int main(void)
{
freopen(_fin,"r",stdin);
freopen(_fout,"w",stdout);
scanf("%d",&n);
for (i=1;i<=n;i++)
scanf("%d",&kStr[i]);
for (i=1;i<=n-1;i++)
{
int x,y;
scanf("%d%d",&x,&y);
Gr[x]++; T[y]=x;
}
fseek(stdin,0,SEEK_SET);
for (i=1;i<=n;i++)
{
A[i] = (int*) malloc((Gr[i]+1)*sizeof(int));
memset(A[i],0,sizeof(A[i]));
}
scanf("%d",&n);
for (i=1;i<=n;i++)
scanf("%d",&kStr[i]);
for (i=1;i<=n-1;i++)
{
int x,y;
scanf("%d%d",&x,&y);
A[x][++A[x][0]]=y;
}
memset(C,0,sizeof(C));
for (i=1;i<=n;i++)
if (!T[i])
{ R=i; break; }
DF(R);
for (i=1;i<=n;i++)
printf("%d ",C[i]-1);
fclose(stdin);
fclose(stdout);
return 0;
}