Cod sursa(job #1540632)

Utilizator botultesteprobleme botul Data 2 decembrie 2015 23:28:47
Problema Cerere Scor 25
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#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;
}