Cod sursa(job #3164187)

Utilizator andrei_marciucMarciuc Andrei andrei_marciuc Data 2 noiembrie 2023 13:26:21
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <iostream>
#include <fstream>
#include <vector>
#define NMAX 100005
using namespace std;

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

vector<int> vc[NMAX];
int a, b, nre;
int rz[NMAX];
int q[NMAX];
int k[NMAX];
int n, i, j;

void dfs(int n) {
    q[nre++] = n;
    if(k[n] != 0) 
        rz[n] = rz[q[nre - k[n] - 1]] + 1;
    
    for(int i = 0; i < vc[n].size(); i++)
        dfs(vc[n][i]);
    nre--;
}

int main() 
{    
    fin >> n;
    for(i = 1; i <= n; i++)
        fin >> k[i];
    
    for(i = 1; i < n; i++) {
        fin >> a >> b;
        vc[a].push_back(b);
        rz[b] = 1;
    }
    
    for(i = 1; i <= n; i++) {
        if(rz[i] == 0)    
            a = i;
        rz[i] = 0;
    }

    nre = 1;
    dfs(a);
    for(i = 1; i <= n; i++)
        fout << rz[i] << ' ';
    
    fout << '\n';
    return 0;
}