Cod sursa(job #3205566)

Utilizator Robert_MitriRobert Mitri Robert_Mitri Data 20 februarie 2024 09:37:32
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <fstream>
#include <vector>
using namespace std;

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

int n;

const int nmax = 100000;

vector <int> v[nmax + 5];

int k[nmax + 5];

int d[nmax + 5];

int stk[nmax + 5];
int ssz;
int root;

void dfs(int nod)
{
    stk[++ssz]=nod;
    if(k[nod]==0)
        d[nod]=0;
    else
        d[nod]=d[stk[max(1,ssz-k[nod])]]+1;
    for(auto& i : v[nod])
        dfs(i);
    ssz--;
}
bool viz[nmax + 5];

int main()
{
    fin>>n;
    for(int i=1;i<=n;i++)
        fin>>k[i];
    for(int i=1;i<n;i++)
    {
        int x,y;
        fin>>x>>y;
        v[x].push_back(y);
        viz[y]=true;
    }
    for(int i=1;i<=n;i++)
    {
        if(!viz[i])
            dfs(i);
    }
    for(int i=1;i<=n;i++)
        fout<<d[i]<<' ';
}