Cod sursa(job #2542099)

Utilizator bluestorm57Vasile T bluestorm57 Data 9 februarie 2020 14:41:48
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <bits/stdc++.h>

using namespace std;

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

const int NMAX = 1e5 + 10;
int n,k[NMAX],ans[NMAX],father[NMAX];
vector < int > v[NMAX];
vector < int > Stack;

void dfs(int node){
    Stack.push_back(node);

    if(k[node])
        ans[node] = 1 + ans[Stack[Stack.size() - 1 - k[node]]];

    for(auto it: v[node])
        dfs(it);

    Stack.pop_back();
}

int main(){
    int i,j,x,y;
    f >> n;
    for(i = 1 ; i <= n ; i++){
        f >> k[i];
        father[i] = -1;
    }

    for(i = 1 ; i < n ; i++){
        f >> x >> y;
        v[x].push_back(y);
        father[y] = x;
    }

    int root = -1;
    for(i = 1 ; i <= n ; i++)
        if(father[i] == -1){
            root = i;
            break;
        }

    dfs(root);

    for(i = 1 ; i <= n ; i++)
        g << ans[i] << " ";

    return 0;
}