Cod sursa(job #1833887)

Utilizator c0mradec0mrade c0mrade Data 23 decembrie 2016 14:17:24
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include<bits/stdc++.h>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");

const int N = 100100;
int n, t, ans[N], s[N], T[N], k[N];
vector<int> G[N];

void DF(int x) {
    s[++t] = x;
    if(k[x]) {
        ans[x] = ans[s[t - k[x]]] + 1;
    }
    for(int i = 0; i < G[x].size(); ++i) {
        DF(G[x][i]);
    }
    --t;
}

int main () {
    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;
        G[x].push_back(y);
        T[y]=1;
    }
    for(int i = 1; i <= n; ++i) {
        if(!T[i]) {
            DF(i);
            break;
        }
    }
    for(int i = 1; i <= n; ++i) {
        fout << ans[i] << ' ';
    }
    return 0;
}