Pagini recente » Cod sursa (job #1107730) | Cod sursa (job #2131831) | Cod sursa (job #1847069) | Monitorul de evaluare | Cod sursa (job #2149205)
#include<cstdio>
#include<vector>
#include<cctype>
using namespace std;
int st[100005],k[100005],viz[100005],u,dp[100005];
char ch[4000005];
int poz;
const int buffsz=4000000;
char nextc(){
if (poz==buffsz){
fread(ch,1,buffsz,stdin);
poz=0;}
return ch[poz++];}
int read(){
char c;
int nr=0;
do{
c=nextc();
}while(!isdigit(c));
do{
nr=nr*10+c-'0';
c=nextc();
}while(isdigit(c));
return nr;}
vector<int>g[100005];
int dfs(int nod){
int lim=g[nod].size(),i;
st[++u]=nod;
for(i=0;i<lim;i++){
if (k[g[nod][i]]==0)
dp[g[nod][i]]=0;
else
dp[g[nod][i]]=dp[st[u-k[g[nod][i]]+1]]+1;
dfs(g[nod][i]);}
u--;}
int main(){
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
int n,i,x,y;
fread(ch,1,buffsz,stdin);
n=read();
for(i=1;i<=n;i++)
k[i]=read();
for(i=1;i<n;i++){
x=read();
y=read();
viz[y]=1;
g[x].push_back(y);}
for(i=1;i<=n;i++)
if (viz[i]==0)
break;
dfs(i);
for(i=1;i<=n;i++)
printf("%d ",dp[i]);
return 0;}