Pagini recente » Cod sursa (job #1402297) | Cod sursa (job #2196935) | Cod sursa (job #1017872) | Cod sursa (job #1223034) | Cod sursa (job #1689772)
#include <bits/stdc++.h>
#define NMax 100005
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
int n,x,y,top;
int rez[NMax],viz[NMax],tata[NMax],s[NMax],b[NMax];
vector<int> G[NMax];
void dfs(int nod,int tata){
s[++top] = nod;
viz[nod] = viz[s[top - b[nod]]] + 1;
for(int i = 0; i < G[nod].size(); ++i){
if(!viz[G[nod][i]]){
dfs(G[nod][i],nod);
}
}
s[top] = 0;
--top;
}
int main()
{
f >> n;
for(int i = 1; i <= n; ++i){
f >> b[i];
}
for(int i = 1; i < n; ++i){
f >> x >> y;
tata[y] = x;
G[x].push_back(y);
}
int root = 1;
while(tata[root])
root = tata[root];
dfs(root,0);
for(int i = 1; i <= n; ++i){
g << viz[i] - 1 << ' ';
}
return 0;
}