Cod sursa(job #2358681)

Utilizator AndreiSorin26012001Cirpici Andrei Sorin AndreiSorin26012001 Data 28 februarie 2019 11:18:34
Problema Cerere Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.74 kb
#include <bits/stdc++.h>
#define DIM 100000
using namespace std;

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

int n;
int k[DIM], Stack[DIM + 5], D[DIM + 5];

vector<int> children[DIM + 5];
bool visited[DIM + 5];

void dfs( int node, int step )
{
    visited[node] = true;

    Stack[step] = node;
    D[node] = 1 + D[ Stack[step - k[node]] ];

    for( int child : children[node] )
        if( !visited[child] )
            dfs(child, step + 1);
}

int main()
{
    in>>n;
    for( int i = 1; i <= n; i++ )
        in>>k[i];

    for( int i = 1; i < n; i++ )
    {
        int from, to;
        in>>from>>to;

        children[from].push_back(to);
    }

    dfs(1, 1);

    for( int i = 1; i <= n; i++ )
        out<<D[i] - 1<<" ";

    return 0;
}