Pagini recente » Cod sursa (job #1642174) | Cod sursa (job #3174403) | Cod sursa (job #984882) | Cod sursa (job #2247849) | Cod sursa (job #3199931)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
int n, Root;
bitset<100005> viz;
int a[100005], d[100005];
int st[100005], top;
vector<int> L[100005];
void DFS(int k)
{
st[++top] = k;
if (a[k] != 0)
d[k] = 1 + d[st[top - a[k]]];
for (int i : L[k])
DFS(i);
top--;
}
int main()
{
int i, j, k;
fin >> n;
for (i = 1; i <= n; i++)
fin >> a[i];
for (k = 1; k < n; k++)
{
fin >> i >> j;
L[i].push_back(j);
viz[j] = 1;
}
for (i = 1; i <= n; i++)
if (viz[i] == 0)
Root = i;
DFS(Root);
for (i = 1; i <= n; i++)
fout << d[i] << " ";
}