Pagini recente » Cod sursa (job #2083569) | Cod sursa (job #1546128) | Cod sursa (job #2053529) | Cod sursa (job #1006431) | Cod sursa (job #1540632)
#include <fstream>
using namespace std;
ifstream fin ("cerere.in");
ofstream fout ("cerere.out");
int n, top, nod, rad, STR[100010], S[100010], NR[100010], DAD[100010], SON[100010][3];
int main()
{
fin >> n;
for (int i = 1; i <= n; i ++) fin >> STR[i];
for (int i = 1, a, b; i < n; i ++)
{
fin >> a >> b;
DAD[b] = a;
SON[a][++SON[a][0]] = b;
}
for (int i = 1; i <= n; i ++)
{
if (!DAD[i])
{
rad = i;
break;
}
}
S[++top] = rad;
while (top)
{
if (SON[S[top]][0])
{
nod = SON[S[top]][SON[S[top]][0]];
SON[S[top]][0] --;
S[++top] = nod;
if (STR[nod] != 0)
{
NR[nod] = NR[S[top - STR[nod]]] + 1;
}
}
else
{
top --;
}
}
for (int i = 1; i <= n; i ++) fout << NR[i] << ' ';
fout.close();
return 0;
}