Cod sursa(job #2980740)

Utilizator SergetecLefter Sergiu Sergetec Data 16 februarie 2023 19:36:47
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.04 kb
/*
  Lefter Sergiu - 16/02/2023
*/
#include <fstream>
#include <vector>

using namespace std;

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

const int N = 1e5;

int n, T[N+1], stramos[N+1], drum[N+1], nrC[N+1];
vector<int> a[N+1];

void DFS(int nod, int nivel) {
    drum[nivel] = nod;
    if (stramos[nod] != 0) {
        nrC[nod] = 1 + nrC[drum[nivel - stramos[nod]]];
    }
    for (auto i: a[nod]) {
        DFS(i, nivel + 1);
    }
}

int radacina() {
    for (int i = 1; i <= n; ++i) {
        if (T[i] == 0) {
            return i;
        }
    }
    return 0;
}

int main() {
    in >> n;
    for (int i = 1; i <= n; ++i) {
        in >> stramos[i];
    }
    for (int i = 1; i <= n - 1; ++i) { //arborele cu n noduri are n - 1 muchii
        int x, y;
        in >> x >> y;
        T[y] = x; //tata
        a[x].push_back(y); //fii
    }
    int r = radacina();
    DFS(r, 0);
    for (int i = 1; i <= n; ++i) {
        out << nrC[i] << " ";
    }
    in.close();
    out.close();
    return 0;
}