Cod sursa(job #2599320)

Utilizator andreisontea01Andrei Sontea andreisontea01 Data 11 aprilie 2020 14:29:00
Problema Cerere Scor 25
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <bits/stdc++.h>

using namespace std;

const int MAXN = 100005;

int cer[MAXN], stramos[MAXN][30];

int main()
{
    ifstream fin("cerere.in");
    ofstream fout("cerere.out");
    int n;
    fin >> n;
    for(int i = 1; i <= n; ++i)
        fin >> cer[i];
    for(int i = 1; i < n; ++i){
        int x, y;
        fin >> x >> y;
        stramos[y][0] = x;
    }
    for(int i = 1; i <= n; ++i)
        for(int j = 1; j <= 20; ++j)
            stramos[i][j] = stramos[stramos[i][j - 1]][j - 1];
    for(int i = 1; i <= n; ++i){
        int crt = i, cnt = 0;
        while(cer[crt] > 0){
            int niv = cer[crt];
            for(int pas = 20; pas >= 0; --pas){
                if((1 << pas) <= niv){
                    crt = stramos[crt][pas];
                    niv -= (1 << pas);
                }
            }
            cnt++;
        }
        fout << cnt << " ";
    }
    return 0;
}