Pagini recente » Cod sursa (job #1166403) | Cod sursa (job #1061700) | Cod sursa (job #312444) | Cod sursa (job #2251057) | Cod sursa (job #3196730)
#include <fstream>
#include <vector>
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
vector <int> a[1 << 17];
int n, b[1 << 17], T[1 << 17], sol[1 << 17], s[1 << 17], t;
void dfs(int x)
{
s[++t] = x;
if (b[x]) {
sol[x] = sol[s[t - b[x]]] + 1;
}
for (int i = 0; i < (int) a[x].size(); ++i) {
dfs(a[x][i]);
}
t--;
}
int main()
{
f >> n;
for (int i = 1; i <= n; ++i) {
f >> b[i];
}
for (int i = 1; i < n; ++i) {
int x, y;
f >> x >> y;
a[x].push_back(y);
T[y] = 1;
}
int i;
for (i = 1; T[i]; ++i) {
}
dfs(i);
for (i = 1; i <= n; ++i) {
g << sol[i] << ' ';
}
return 0;
}