Cod sursa(job #3364741)

Utilizator GoreaRaresGorea Rares-Andrei GoreaRares Data 10 septembrie 2026 16:35:11
Problema Cerere Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <bits/stdc++.h>

using namespace std;

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

int n, k[100001], myStack[100001], vf, rez[100001], parent[100001];
vector<int> adj[100001];

void read(){
    fin >> n;
    for(int i = 1; i <= n; i++)
        fin >> k[i];
    for(int i = 1; i < n; i++){
        int u, v;
        fin >> u >> v;
        adj[u].push_back(v);
        adj[v].push_back(u);
        parent[v] = u;
    }
}

void dfs(int u){
    myStack[++vf] = u;
    for(int v : adj[u]){
        if(v == parent[u])
            continue;
        if(k[v] != 0)
            rez[v] = 1 + rez[myStack[vf + 1 - k[v]]];
        dfs(v);
        vf--;
    }
}

int main()
{
    read();
    dfs(1);
    for(int i = 1; i <= n; i++)
        fout << rez[i] << " ";
    return 0;
}