Pagini recente » Cod sursa (job #878929) | Cod sursa (job #1993042) | Cod sursa (job #2934115) | Cod sursa (job #2136286) | Cod sursa (job #1744762)
#include <cstdio>
#define MAXN 100000
int father[MAXN+1];
int k[MAXN+1];
int dp[MAXN+1];
char vf[MAXN+1];
int DFS(int nod){
int i,x;
if(vf[nod]==1)
return dp[nod];
else{
x=nod;
for(i=0;i<k[nod];i++)
x=father[x];
vf[nod]=1;
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(father[i]==0||k[i]==0)
vf[i]=1;
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;
}