Pagini recente » Cod sursa (job #1712663) | Cod sursa (job #2947778) | Cod sursa (job #1448324) | Cod sursa (job #555505) | Cod sursa (job #2794284)
#include <fstream>
#include <vector>
using namespace std;
const int NMAX = 1e5;
int k[NMAX + 5],dp[NMAX + 5];
vector <int> e[NMAX + 5],v;
void dfs(int node) {
v.push_back(node);
if (k[node])
dp[node] = dp[v[v.size() - 1 - k[node]]] + 1;
for (int i = 0;i < e[node].size();i++)
dfs(e[node][i]);
v.pop_back();
}
int main()
{
ifstream fin("cerere.in");
ofstream fout("cerere.out");
int n,a,b;
long long s = 0;
fin >> n;
s = 1ll * n * (n + 1) / 2;
for (int i = 1;i <= n;i++)
fin >> k[i];
for (int i = 0;i < n - 1;i++) {
fin >> a >> b;
e[a].push_back(b);
s -= b;
}
dfs(s);
for (int i = 1;i <= n;i++)
fout << dp[i] << " ";
return 0;
}