Pagini recente » Cod sursa (job #3284815) | Cod sursa (job #3147002) | Cod sursa (job #2031005) | Cod sursa (job #1768559) | Cod sursa (job #3259700)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
bitset <100001> viz, not_root;
int ancest[100001], n, x, y, i;
vector <int> a[100001], st, r(100001, -1);
void dfs(int v, int h){
st.push_back(v);
viz[v]=1;
r[v]=1+r[st[h-ancest[v]]];
//cout<<v<<' '<<r[v]<<endl;
for(int i:a[v]){
if(!viz[i]) dfs(i, h+1);
}
st.resize(st.size()-1);
}
int main(){
fin>>n;
for(i=1;i<=n;i++) fin>>ancest[i];
for(i=1;i<n;i++){
fin>>x>>y;
not_root[y]=1;
a[x].push_back(y);
a[y].push_back(x);
}
for(i=1;i<=n;i++){
if(!not_root[i])
dfs(i, 0);
}
for(i=1;i<=n;i++){
fout<<r[i]<<' ';
}
}