Cod sursa(job #3135550)

Utilizator Mihai_PopescuMihai Popescu Mihai_Popescu Data 3 iunie 2023 17:22:22
Problema Cerere Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <fstream>
using namespace std;

ifstream fin("cerere.in");
ofstream fout("cerere.out");

#define NMAX 100005

int v[NMAX], g[NMAX], stramos[NMAX];

int main()
{
    int n;
    fin >> n;

    for (int i = 1; i <= n; ++ i)
        fin >> v[i];

    for (int i = 1; i < n; ++ i)
    {
        int a, b;
        fin >> a >> b;
        g[b] = a;
    }

    for (int i = n; i >= 1; -- i)
    {
        int nod = i;
        int cnt = 0;
        bool rezolvat = 0;
        int nr = 0;

        if (v[nod] == 0)
            rezolvat = 1;

        while (!rezolvat)
        {
            int nod_nou = nod;
            while (nr < v[nod])
            {
                nod_nou = g[nod_nou];
                nr ++;
            }

            nod = nod_nou;
            if (v[nod] == 0)
                rezolvat = 1;

            if (stramos[nod])
            {
                cnt += stramos[nod];
                rezolvat = 1;
            }

            nr = 0;
            cnt ++;
        }

        stramos[i] = cnt;
    }

    for (int i = 1; i <= n; ++ i)
        fout << stramos[i] << ' ';
    return 0;
}