Cod sursa(job #2711499)

Utilizator Ionut2791Voicila Ionut Marius Ionut2791 Data 24 februarie 2021 11:19:17
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <bits/stdc++.h>
#define fin cin
#define ll long long
#define sz(x) (int)(x).size()
#define debug(v,n) for (int i = 1; i <= (n); ++i) cout << v[i] << " ";
#define next cout << '\n'
using namespace std;

const int N = 1e5 + 5;
int n, k[N], ans[N], in[N];
bool root[N];
vector<int> graf[N];

void dfs(int nod, int p) {
    in[p] = nod;
    if(k[nod] != 0)
        ans[nod] = ans[in[p - k[nod]]] + 1;

    for (int to : graf[nod]) {
        dfs(to, p + 1);
    }
}

int main() {
    //ifstream fin("date.in.txt");
    ifstream fin("cerere.in");
    ofstream fout("cerere.out");
    fin >> n;
    for (int i = 1; i <= n; ++i)
        fin >> k[i];

    fill(root, root + N, true);
    for (int i = 1; i < n; ++i) {
        int a, b;
        fin >> a >> b;
        graf[a].push_back(b);
        root[b] = false;
    }

    for (int i = 1; i <= n; ++i) {
        if(root[i]) {
            dfs(i, 1);
            break;
        }
    }

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

    return 0;
}