Cod sursa(job #2762305)

Utilizator andreiiorgulescuandrei iorgulescu andreiiorgulescu Data 6 iulie 2021 13:51:25
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <bits/stdc++.h>

using namespace std;

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

int n,k[100005],fin[100005],t[100005],rad;
vector<int>a,f[100005];

void citire()
{
    in >> n;
    for (int i = 1; i <= n; i++)
        in >> k[i];
    for (int i = 1; i < n; i++)
    {
        int x,y;
        in >> x >> y;
        f[x].push_back(y);
        t[y] = x;
    }
    for (int i = 1; i <= n; i++)
        if (t[i] == 0)
            rad = i;
}

void rec(int p)
{
    a.push_back(p);
    if (k[p] == 0)
        fin[p] = 0;
    else
        fin[p] = 1 + fin[a[a.size() - k[p] - 1]];
    for (int i = 0; i < f[p].size(); i++)
    {
        rec(f[p][i]);
        a.pop_back();
    }
}

void afisare()
{
    for (int i = 1; i <= n; i++)
        out << fin[i] << " ";
}

int main()
{
    citire();
    rec(rad);
    afisare();
    return 0;
}