Pagini recente » Cod sursa (job #689308) | Cod sursa (job #297833) | Cod sursa (job #1679489) | Istoria paginii utilizator/valeanuandrei | Cod sursa (job #3306283)
#include <bits/stdc++.h>
#define int long long
using namespace std;
ifstream fin ("cerere.in");
ofstream fout ("cerere.out");
int k[100005];
vector <int> gr[100005];
int viz[100005];
int ans[100005];
vector <int> st;
void DFS(int node,int lvl){
viz[node] = 1;
st.push_back(node);
ans[node] = ans[st[lvl-k[node]]]+1;
for (auto vec:gr[node]){
if (viz[vec]) continue;
DFS(vec,lvl+1);
}
st.pop_back();
}
signed main()
{
int n;
fin >> n;
for (int i=1;i<=n;++i){
fin >> k[i];
}
int root = n*(n+1)/2;
for (int i=1;i<n;++i){
int a,b;
fin >> a >> b;
root -= b;
gr[a].push_back(b);
}
DFS(root,0);
for (int i=1;i<=n;++i){
fout << ans[i]-1 << ' ';
}
return 0;
}