Cod sursa(job #938048)

Utilizator sleepaholicNeculaescu Theodor sleepaholic Data 11 aprilie 2013 17:43:38
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include<vector>
#include<fstream>
using namespace std;

ifstream cin("cerere.in");
ofstream cout("cerere.out");

const int N = 110000;

int n, k[N], s[N], g[N], nr, d[N];
vector<int> v[N];

void df(int nod) {
    s[++nr] = nod;
    if(k[nod])
        d[nod] = d[s[nr - k[nod]]] + 1;

    for(vector<int>::iterator it = v[nod].begin(); it != v[nod].end(); ++it)
        df(*it);
    --nr;
}

int main() {
    int i;

    cin >> n ;

    for(i = 1; i <= n; ++i)
        cin >> k[i];

    for(i = 1; i < n;++i) {
        int a, b;
        cin >> a >> b;
        g[b]++;
        v[a].push_back(b);
    }
    int r;
    for(i = 1; i <= n; ++i) if(!g[i])
        r = i;
    df(r);

    for(i = 1; i <= n; ++i)
        cout << d[i] << " ";

    return 0;
}