Pagini recente » Cod sursa (job #1344453) | Cod sursa (job #2882264) | Cod sursa (job #2770547) | Cod sursa (job #2461176) | Cod sursa (job #1744760)
#include <cstdio>
#define MAXN 100000
int father[MAXN+1];
int k[MAXN+1];
int dp[MAXN+1];
int DFS(int nod){
int i,x;
if(dp[nod]>0||k[nod]==0||father[nod]==0)
return dp[nod];
else{
x=nod;
for(i=0;i<k[nod];i++)
x=father[x];
return dp[nod]=DFS(x)+1;
}
}
int main(){
FILE*fi,*fout;
int i,n,x,y;
fi=fopen("cerere.in" ,"r");
fout=fopen("cerere.out" ,"w");
fscanf(fi,"%d " ,&n);
for(i=1;i<=n;i++)
fscanf(fi,"%d " ,&k[i]);
for(i=1;i<n;i++){
fscanf(fi,"%d %d " ,&x,&y);
father[y]=x;
}
for(i=1;i<=n;i++)
if(dp[i]==0)
dp[i]=DFS(i);
for(i=1;i<=n;i++)
fprintf(fout,"%d " ,dp[i]);
fclose(fi);
fclose(fout);
return 0;
}