Cod sursa(job #2157850)

Utilizator Constantin.Dragancea Constantin Constantin. Data 9 martie 2018 22:58:35
Problema Cerere Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.69 kb
#pragma GCC optimize("03")
#include <bits/stdc++.h>
using namespace std;

int n, a[100010], ans[100010], pr[100010];

int get(int q){
    if (ans[q] != -1) return ans[q];
    int nod = q;
    for (int i=1; i<=a[q]; i++) nod = pr[nod];
    ans[q] = 1 + get(nod);
    return ans[q];
}

int main(){
    ios_base::sync_with_stdio(0); cin.tie(0);
    ifstream cin ("cerere.in");
    ofstream cout ("cerere.out");
    cin >> n;
    for (int i=1; i<=n; i++){
        cin >> a[i];
        if (a[i]) ans[i] = -1;
    }
    for (int i=1; i<n; i++){
        int a, b;
        cin >> a >> b;
        pr[b] = a;
    }
    for (int i=1; i<=n; i++) cout << get(i) << " ";
    return 0;
}