Pagini recente » Cod sursa (job #447060) | Cod sursa (job #1970701) | Cod sursa (job #573279) | Cod sursa (job #1746586) | Cod sursa (job #2542189)
#include <bits/stdc++.h>
#define NMAX 100005
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
int n;
int t[NMAX];
int val[NMAX];
int calc[NMAX];
void citire()
{
fin>>n;
for(int i=1;i<=n;i++)
{
calc[i] = -1;
fin>>val[i];
}
for(int i=1;i<=n-1;i++)
{
int x,y;
fin>>x>>y;
t[y] = x;
}
}
void upTree(int n)
{
int save = n;
int k = val[n];
for(int i=1;i<=k;i++)
n = t[n];
if(calc[n] == -1)
{
if(val[n] == 0)
{
calc[save] = 1;
}
else
{
upTree(n);
calc[save] = calc[n] + 1;
}
}
else
{
calc[save] = calc[n] + 1;
}
}
void rezolva()
{
for(int i=1;i<=n;i++)
{
if(calc[i] == -1)
{
if(val[i] == 0)
{
calc[i] = 0;
fout<<0<<" ";
}
else
{
upTree(i);
fout<<calc[i]<<" ";
}
}
else
{
fout<<calc[i]<<" ";
}
}
}
int main()
{
citire();
rezolva();
}