Cod sursa(job #3302653)

Utilizator GliggyGligor Andrei Gliggy Data 9 iulie 2025 19:51:47
Problema Cerere Scor 95
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.7 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],st[100010];
int v[100010];
int rec(int nod){
    if(k[nod]==0) return st[nod];
    int vnod;
    for(vnod=nod,cop=k[nod],l=0;cop>0;l++,cop/=2) if(cop%2==1) nod=dp[nod][l];
    k[vnod]=0;
    st[vnod]=rec(nod)+1;
    return st[vnod];
}
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];
    for(i=1;i<=n;i++) fout<<rec(i)<<" ";
    return 0;
}