Cod sursa(job #2564668)

Utilizator ursu0406Ursu Ianis-Vlad ursu0406 Data 2 martie 2020 09:04:17
Problema Cerere Scor 85
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <bits/stdc++.h>

using namespace std;

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

const int N_MAX = 1e5 + 1;
const int LOG_N_MAX = 16;

int N, K[N_MAX], DP[LOG_N_MAX + 1][N_MAX];


int main()
{
    fin >> N;

    for(int i = 1; i <= N; ++i)
        fin >> K[i];

    for(int A, B, i = 1; i < N; ++i)
        fin >> A >> B,
        DP[0][B] = A;

    for(int k = 1; k <= LOG_N_MAX; ++k)
        for(int i = 1; i <= N; ++i)
            DP[k][i] = DP[k - 1][DP[k - 1][i]];

    for(int i = 1; i <= N; ++i)
    {
        int ans = 0;
        int node = i;

        while(K[node] != 0)
        {
            int aux = node;

            for(int j = 0; K[node] >> j; ++j)
                if(1 & (K[node] >> j))
                    aux = DP[j][aux];

            node = aux;

            ++ans;
        }

        fout << ans << ' ';
    }
}