Cod sursa(job #2358690)

Utilizator AndreiSorin26012001Cirpici Andrei Sorin AndreiSorin26012001 Data 28 februarie 2019 11:21:17
Problema Cerere Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.86 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);
    }

    for( int i = 1; i <= n; i++ )
        if( k[i] == 0 )
        {
            dfs(i, 1);
            break;
        }

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

    return 0;
}