Cod sursa(job #1976304)

Utilizator BlackNestaAndrei Manaila BlackNesta Data 3 mai 2017 08:43:09
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <bits/stdc++.h>
#define Nmax 100005

using namespace std;

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

int N, a[Nmax], t[Nmax], ans[Nmax];
vector <int> L[Nmax], st;

inline void Read() {
    int i, x, y;
    fin >> N;
    for(i = 1; i <= N; i++) {
        fin >> a[i];
    }
    for(i = 1; i < N; i++) {
        fin >> x >> y;
        t[y] = x;
        L[x].push_back(y);
    }
    fin.close();
}

void DFS(int nod) {
    if(a[nod] > 0) {
        ans[nod] =  1 + ans[st[st.size() - a[nod]]];
    }
    st.push_back(nod);
    for(auto it : L[nod]) {
        DFS(it);
    }
    st.pop_back();
}

inline void Solve() {
    int rad;
    rad = 0;
    while(t[++rad]);
    DFS(rad);
}

inline void Write() {
    int i;
    for(i = 1; i <= N; i++) {
        fout << ans[i] << " ";
    }
    fout << "\n";
    fout.close();
}

int main() {
    Read();
    Solve();
    Write();
    return 0;
}