Cod sursa(job #2940484)

Utilizator divadddDavid Curca divaddd Data 15 noiembrie 2022 17:57:40
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
#define NMAX 100002
#define LMAX 20
using namespace std;
vector<int> v[NMAX];
int n,x,y,st[NMAX],vf[NMAX],k[NMAX],rad,sol[NMAX];
/// st = lantul de la radacina

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

void dfs(int nod,int niv){
    st[niv] = nod;
    if(k[nod]){
        sol[nod] = 1+sol[st[niv-k[nod]]];
    }
    for(auto vecin: v[nod]){
        dfs(vecin, niv+1);
    }
}

int main()
{
    fin >> n;
    for(int i = 1; i <= n; i++){
        fin >> k[i];
    }
    for(int i = 1; i < n; i++){
        fin >> x >> y;
        v[x].push_back(y);
        vf[y] = x; /// refolosesc vf
    }
    for(int i = 1; i <= n; i++){
        if(vf[i] == 0){
            rad = i;
            break;
        }
    }
    memset(vf,0,sizeof(vf));
    dfs(rad, 1);
    for(int i = 1; i <= n; i++){
        fout << sol[i] << " ";
    }
    return 0;
}