Cod sursa(job #2469912)

Utilizator ioana.jianuIoana Jianu ioana.jianu Data 8 octombrie 2019 12:01:18
Problema Cerere Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <iostream>
#include <stdio.h>
#include <vector>

using namespace std;

const int NMAX = 100001;
vector <int> v[NMAX];
int val[NMAX], d[NMAX], k[NMAX];

void DFS (int nod, int m) {
   // int i;
    d[m] = nod;
    if (k[nod] == 0)
        val[nod] = 0;
    else
        val[nod] = val[d[m - k[nod]]] + 1;
    for (int fiu : v[nod]) {
    //    fiu = v[nod][i];
        DFS (fiu, m + 1);
    }

}

int main() {

    freopen ("cerere.in", "r", stdin);
    freopen ("cerere.out", "w", stdout);

    int n, i, s, r, a, b;

    scanf ("%d", &n);
    for (i = 1; i <= n; i++)
        scanf ("%d", &k[i]);

    s = 0;
    for (i = 1; i < n; i++) {
        scanf ("%d%d", &a, &b);
        v[a].push_back(b);
        s += b;
    }
    r = n * (n + 1) / 2 - s;

    DFS(r, 1);
    for (i = 1; i <= n; i++)
        printf ("%d ", val[i]);

    return 0;
}