Cod sursa(job #3302652)

Utilizator GliggyGligor Andrei Gliggy Data 9 iulie 2025 19:43:14
Problema Cerere Scor 85
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("cerere.in");  //strudel
ofstream fout("cerere.out");
int n,i,a,b,j,nod,s,l,cop;
int k[100010],dp[100010][20];
int v[100010];
int main()
{
    fin>>n;
    for(i=1;i<=n;i++) fin>>k[i];
    for(i=1;i<n;i++) fin>>a>>b,v[b]=a;
    for(i=1;i<=n;i++) dp[i][0]=v[i];
    for(j=1;j<20;j++)
        for(i=1;i<=n;i++)
            dp[i][j]=dp[dp[i][j-1]][j-1];
    //print
    // for(i=1;i<=n;i++,fout<<'\n')
    //     for(j=0;j<20;j++)
    //         fout<<dp[i][j]<<" ";
    // for(i=1;i<=n;i++){
    //     for(nod=i,s=0;k[nod]!=0;s++){
    //         for(cop=k[nod],l=0;cop>0;l++,cop/=2) if(cop%2==1) nod=dp[nod][l];
    //     }
    //     fout<<s<<" ";
    // }
    for (i = 1; i <= n; i++) {
        int nod = i;
        int steps = 0;
        while (k[nod] != 0) {
            int to_jump = k[nod];
            for (int j = 0; to_jump > 0; j++) {
                if (to_jump & 1) nod = dp[nod][j];
                to_jump >>= 1;
            }
            steps++;
        }
        fout << steps << " ";
    }

    return 0;
}