Pagini recente » Cod sursa (job #1804958) | Cod sursa (job #1698094) | Cod sursa (job #456196) | Cod sursa (job #1981255) | Cod sursa (job #2542094)
#include <bits/stdc++.h>
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
const int NMAX = 1e5 + 10;
int n,k[NMAX],ans[NMAX],father[NMAX];
vector < int > v[NMAX];
void dfs(int node){
if(k[node]){
int x = node;
while(k[node]){
x = father[x];
k[node]--;
}
ans[node] = ans[x] + 1;
}
for(auto it: v[node])
dfs(it);
}
int main(){
int i,j,x,y;
f >> n;
for(i = 1 ; i <= n ; i++){
f >> k[i];
father[i] = -1;
}
for(i = 1 ; i < n ; i++){
f >> x >> y;
v[x].push_back(y);
father[y] = x;
}
int root = -1;
for(i = 1 ; i <= n ; i++)
if(father[i] == -1){
root = i;
break;
}
dfs(root);
for(i = 1 ; i <= n ; i++)
g << ans[i] << " ";
return 0;
}