Cod sursa(job #2786440)

Utilizator UnknownPercentageBuca Mihnea-Vicentiu UnknownPercentage Data 20 octombrie 2021 22:26:40
Problema Cerere Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.67 kb
#include <bits/stdc++.h>
 
using namespace std;
 
ifstream f("cerere.in");
ofstream g("cerere.out");

vector <int> Gr[100001];

int a[100001], ans[100001], dad[100001];
int N, root = 1;

void dfs(int v, int lvl = 0) {
    dad[lvl] = v;
    ans[v] = ans[dad[lvl - a[v]]] + 1;
    for(int to : Gr[v])
        dfs(to, lvl + 1);
}
 
int main(){
    f >> N;
    for(int i = 1;i <= N;i++)
        f >> a[i];

    for(int i = 1;i < N;i++) {
        int a, b;
        f >> a >> b;
        Gr[a].emplace_back(b);
        dad[b] = a;
    }

    for(;dad[root] != 0;root++);
    dfs(root);
    
    for(int i = 1;i <= N;i++)
        g << ans[i] - 1 << " "; 
 
}