Pagini recente » Cod sursa (job #1447228) | Cod sursa (job #2220338) | Cod sursa (job #149762) | Borderou de evaluare (job #435087) | Cod sursa (job #990646)
Cod sursa(job #990646)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
const int MAX_N = 100100;
int n, root;
int wh[MAX_N];
vector<int> g[MAX_N];
int stk[MAX_N];
int soln[MAX_N];
inline void dfs(const int &node) {
stk[++stk[0]] = node;
if (wh[node] == 0)
soln[node] = 0;
else
soln[node] = soln[stk[stk[0] - wh[node]]] + 1;
for (int i = 0; i < g[node].size(); ++i)
dfs(g[node][i]);
--stk[0];
}
int main() {
fin >> n; root = n * (n + 1) / 2;
for (int i = 1; i <= n; ++i)
fin >> wh[i];
for (int i = 1; i < n; ++i) {
int x, y;
fin >> x >> y;
root -= y;
g[x].push_back(y);
}
dfs(root);
for (int i = 1; i <= n; ++i)
fout << soln[i] << ' ';
fin.close();
fout.close();
}