Cod sursa(job #2735169)

Utilizator As932Stanciu Andreea As932 Data 1 aprilie 2021 22:02:20
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <bits/stdc++.h>

using namespace std;

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

const int nmax = 1e5 + 5;

int n, x, k[nmax], ans[nmax], b[nmax];
bool vis[nmax];
vector <int> v[nmax];

void read(){
    fin >> n;

    for(int i = 1; i <= n; i++)
        fin >> k[i];

    for(int i = 1; i < n; i++){
        int x, y;
        fin >> x >> y;
        vis[y] = 1;
        v[x].push_back(y);
    }
}

void ancestor(){
    for(int i = 1; i <= n; i++)
        if(!vis[i]){
            x = i;
            break;
        }
}

void solve(int nod, int niv){
    if(k[nod] != 0)
        ans[nod] = 1 + ans[b[niv - k[nod]]];

    b[niv] = nod;

    for(auto nd : v[nod])
        solve(nd, niv + 1);
}

void print(){
    for(int i = 1; i <= n; i++)
        fout << ans[i] << " ";
}

int main()
{
    read();
    ancestor();
    solve(x, 0);
    print();

    return 0;
}