Pagini recente » Istoria paginii utilizator/deliabaltatescu | Cod sursa (job #412934) | Cod sursa (job #1852968) | Cod sursa (job #413514) | Cod sursa (job #2201302)
#include<bits/stdc++.h>
using namespace std;
#define MAXN 100001
#define INF 1000000000
vector<int>g[MAXN];
int v[MAXN], lis[MAXN], d[MAXN], ans=-INF;
int rad[MAXN];
int nr=0;
void dfs(int x){
int y, i;
nr++; lis[nr]=x;
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];
dfs(y);
}
nr--;
}
int main(){
FILE*fin=fopen("cerere.in", "r");
FILE*fout=fopen("cerere.out", "w");
int n, i, a, b, ok;
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);
rad[b]=1;
}
ok=0;
for(i=1; i<=n; i++)
if(rad[i]==0)
ok=i;
printf("%d", ok);
dfs(ok);
for(i=1; i<=n; i++)
fprintf(fout, "%d ", d[i]);
return 0;
}