Pagini recente » Cod sursa (job #589847) | Cod sursa (job #1392994) | Cod sursa (job #472298) | Cod sursa (job #834379) | Cod sursa (job #2201300)
#include<bits/stdc++.h>
using namespace std;
#define MAXN 100001
#define INF 1000000000
vector<int>g[MAXN];
int v[MAXN], lis[MAXN], viz[MAXN], d[MAXN], ans=-INF;
int nr=0;
void dfs(int x){
int y, i;
nr++; lis[nr]=x;
viz[x]=1;
if(v[x]!=0)
d[x]=1+d[lis[nr-v[x]]];
else
d[x]=0;
// if(x==10)
// printf("%d", nr);
for(i=0; i<g[x].size(); i++){
y=g[x][i];
if(viz[y]==0)
dfs(y);
}
nr--;
}
int main(){
FILE*fin=fopen("cerere.in", "r");
FILE*fout=fopen("cerere.out", "w");
int n, i, a, b;
fscanf(fin, "%d", &n);
for(i=1; i<=n; i++)
fscanf(fin, "%d", &v[i]);
for(i=1; i<=n-1; i++){
fscanf(fin, "%d%d", &a, &b);
g[a].push_back(b);
g[b].push_back(a);
}
dfs(1);
for(i=1; i<=n; i++)
fprintf(fout, "%d ", d[i]);
return 0;
}