Pagini recente » Cod sursa (job #525903) | Cod sursa (job #481786) | Cod sursa (job #1437747) | Cod sursa (job #327188) | Cod sursa (job #1268813)
#include <cstdio>
#include <vector>
using namespace std;
vector<int> g[100001];
int k[100001], fw[100001], father[100001];
int sol[100001];
int main()
{
FILE *in = fopen("cerere.in", "r");
FILE *out = fopen("cerere.out", "w");
int n;
fscanf(in, "%d", &n);
for (int i = 1; i <= n; ++i)
fscanf(in, "%d", &k[i]);
for (int x, y, i = 1; i < n; ++i)
{
fscanf(in, "%d%d", &x, &y);
father[y] = x;
}
for (int i = 1; i <= n; ++i)
{
fw[i] = i;
for (int j = 1; j <= k[i]; ++j)
fw[i] = father[fw[i]];
}
for (int i = 1; i <= n; ++i)
{
int x = i;
int l = 0;
while (k[x] > 0 && !sol[x])
{
l++;
x = fw[x];
}
if (sol[x])
l += sol[x];
if (i > 1)
fprintf(out, " %d", l);
else
fprintf(out, "%d", l);
sol[i] = l;
}
fprintf(out, "\n");
return 0;
}