Cod sursa(job #2835314)

Utilizator rares89_Dumitriu Rares rares89_ Data 18 ianuarie 2022 15:07:06
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <fstream>
#include <vector>
#include <cstring>

using namespace std;

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

int n, x, y, k[100005], root, st[100005], ans[100005];
vector<int> G[100005];
bool v[100005];

void dfs(int nod, int nivel) {
    v[nod] = true;
    st[nivel] = nod;
    ans[nod] = ans[st[nivel - k[nod]]] + 1;
    for(auto i : G[nod]) {
        if(!v[i]) {
            dfs(i, nivel + 1);
        }
    }
}

int main() {
    fin >> n;
    for(int i = 1; i <= n; i++) {
        fin >> k[i];
    }
    for(int i = 1; i < n; i++) {
        fin >> x >> y;
        v[y] = true;
        G[x].push_back(y);
    }
    for(int i = 1; i <= n; i++) {
        if(!v[i]) {
            root = i;
            break;
        }
    }
    memset(v, false, sizeof(v));
    dfs(root, 1);
    for(int i = 1; i <= n; i++) {
        fout << --ans[i] << " ";
    }
    return 0;
}