Cod sursa(job #2391224)

Utilizator eduardcadarCadar Eduard eduardcadar Data 28 martie 2019 18:40:45
Problema Cerere Scor 50
Compilator cpp-64 Status done
Runda simple_oni_sim Marime 0.71 kb
#include <fstream>
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
int n,x,y,t[100001],k[100001],r[100001],nr;
bool u[100001];
void rez(int x) {
    u[x] = 1;
    if (!k[x]) r[x] = 0;
    else {
        int p = k[x];
        y = x;
        while (p--) y = t[y];
        if (!u[y]) rez(y);
        else nr += r[y] + 1;
        r[x] = nr;
    }
    nr++;
}
int main()
{
    f >> n;
    for (int i = 1; i <= n; ++i) f >> k[i];
    for (int i = 1; i < n; ++i) {
        f >> x >> y;
        t[y] = x;
    }
    for (int i = 1; i <= n; ++i) {
        nr = 0;
        if (!u[i]) rez(i);
    }
    for (int i = 1; i <= n; ++i) g << r[i] << ' ';
    g << endl;
    return 0;
}