Pagini recente » Cod sursa (job #1366633) | Cod sursa (job #1956590) | Cod sursa (job #2176692) | Cod sursa (job #2291097) | Cod sursa (job #2391563)
#include <fstream>
#include <vector>
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
int n,x,y,k[100001],r[100001],nr,s[100001],t[100001];
vector<int> v[100001];
void dfs(int nod) {
s[++nr] = nod;
for (int i = 0; i < v[nod].size(); ++i) if (r[v[nod][i]] == -1) {
x = v[nod][i];
if (!k[x]) r[x] = 0;
else r[x] = r[s[nr - k[x]+ 1]] + 1;
dfs(v[nod][i]);
}
s[nr--] = 0;
}
int main()
{
f >> n;
for (int i = 1; i <= n; ++i) r[i] = -1;
for (int i = 1; i <= n; ++i) f >> k[i];
for (int i = 1; i < n; ++i) {
f >> x >> y;
t[y] = x;
v[x].push_back(y);
}
int i = 1;
while (t[i]) ++i;
r[i] = 0;
dfs(i);
for (int i = 1; i <= n; ++i) g << r[i] << ' ';
g << endl;
return 0;
}