Cod sursa(job #2542094)

Utilizator bluestorm57Vasile T bluestorm57 Data 9 februarie 2020 14:34:55
Problema Cerere Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.9 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];

void dfs(int node){
    if(k[node]){
        int x = node;
        while(k[node]){
            x = father[x];
            k[node]--;
        }
        ans[node] = ans[x] + 1;
    }
    for(auto it: v[node])
        dfs(it);
}

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;
}