Cod sursa(job #2563820)

Utilizator andreighinea1Ghinea Andrei-Robert andreighinea1 Data 1 martie 2020 14:59:13
Problema Cerere Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <iostream>
#include <fstream>
#include <vector>
#define nmax 100001

using namespace std;

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

vector<int> g[nmax];
int i,n,x,y,k[nmax],sol[nmax],nodram[nmax]; // nodul de pe ramura curenta, pt fiecare nivel in parte
bool used[nmax];

void dfs(int x, int niv){
    nodram[niv]=x;
    if(k[x])
        sol[x]=sol[nodram[niv-k[x]]]+1;

    used[x]=true;
    int l=g[x].size(),v;
    for(int i=0;i<l;++i){
        v=g[x][i];
        if(!used[v])
            dfs(v, niv+1);
    }
}

int main()
{
    f >> n;
    for(i=1;i<=n;++i)
        f >> k[i];
    for(i=1;i<n;++i){
        f >> x >> y;
        g[x].push_back(y);
    }
    dfs(1,0);

    for(i=1;i<=n;++i)
        o << sol[i] << " ";
    return 0;
}