Pagini recente » Cod sursa (job #6762) | Cod sursa (job #411194) | Cod sursa (job #533287) | Cod sursa (job #2931861) | Cod sursa (job #3144573)
#include <bits/stdc++.h>
using namespace std;
const int nmax = 1e5;
int k[nmax+5], ans[nmax+5];
bool hf[nmax+5];
vector<vector<int>> dx(nmax+5);
vector<int> st;
void dfs(int node) {
st.emplace_back(node);
if(k[node] == 0) ans[node] = 0;
else ans[node] = ans[st[st.size() - 1 - k[node]]] + 1;
for(auto i : dx[node]) dfs(i);
st.pop_back();
}
int main() {
ifstream f("cerere.in");
ofstream g("cerere.out");
int n; f >> n;
for(int i=1; i<=n; i++) f >> k[i];
for(int i=1; i<=n-1; i++) {
int x, y; f >> x >> y;
dx[x].emplace_back(y);
hf[y] = true;
}
int root = 0;
for(int i=1; i<=n; i++)
if(hf[i] == false) {
root = i;
break;
}
dfs(root);
for(int i=1; i<=n; i++) g << ans[i] << " ";
return 0;
}