Cod sursa(job #2780749)

Utilizator DariusGhercaDarius Gherca DariusGherca Data 7 octombrie 2021 19:32:04
Problema Cerere Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.74 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
const int N=1e5+10;
vector <int> a[N];
int tata[N],n,val[N],rez[N];
int calc(int x)
{
    if(!val[x])
    {
        return 0;
    }
    if(rez[x]==-1)
    {
        int t=val[x],rezi=x;
        while(t && tata[rezi])
        {
            rezi=tata[rezi];
            t--;
        }
        return 1+calc(rezi);
    }
    else
    return 1;
}
int main()
{
    f>>n;
    for(int i=1;i<=n;i++)
    {
        f>>val[i];
        rez[i]=-1;
    }
    for(int i=1;i<n;i++)
    {
        int x,y;
        f>>x>>y;
        tata[y]=x;
    }
    for(int i=1;i<=n;i++)
    {
        g<<calc(i)<<" ";
    }
    return 0;
}