Cod sursa(job #3351158)

Utilizator ilincaSSirbu Ilinca-Maria eu ilincaS Data 17 aprilie 2026 12:21:44
Problema Cerere Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream cin("cerere.in");
ofstream cout("cerere.out");


int v[100005];

vector <int> rez;
vector <int> adj[100005];
int dp[100005];

void dfs(int k)
{
    if(v[k]>0)
        v[k]=rez[rez.size()-v[k]-1];
    dp[k]=dp[v[k]]+1;
    if(adj[k].size()==0)
    {
        return;
    }
    for(auto i:adj[k])
    {
        rez.push_back(i);
        dfs(i);
        rez.pop_back();
    }
}

int main()
{
    int n, x, y;
    cin>>n;
    for(int i=1; i<=n; i++)
    {
        cin>>v[i];
    }
    for(int i=1; i<=n-1; i++)
    {
        cin>>x>>y;
        adj[x].push_back(y);
    }
    dp[0]=-1;
    rez.push_back(1);
    dfs(1);
    for(int i=1; i<=n; i++)
    {
        cout<<dp[i]<<" ";
    }


    return 0;
}