Cod sursa(job #3362231)

Utilizator Darius9705Darius boros Darius9705 Data 4 august 2026 15:48:06
Problema Cerere Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.71 kb
Ai dreptate, greșeala din soluția anterioară este că urcarea directă cu tata în sus cu $K_{nod}$ pași poate depăși adâncimea curentă sau poate fi incorectă dacă nu se respectă ordinea reală din arbore (drumul de la rădăcină spre nod).Pentru ca cererea să meargă corect din $K$ în $K$ strămoși de-a lungul drumului, cel mai simplu mod este să construim mai întâi drumul de la rădăcină la fiecare nod.Iată codul simplu, fără recursivitate complicată, care reconstruiește drumul spre rădăcină pentru fiecare nod și calculează numărul exact de pași:C++/******************************************************************************

                             Online C++ Compiler.
                Code, Compile, Run and Debug C++ program online.
Write your code in this editor and press "Run" button to compile and execute it.

*******************************************************************************/

#include <bits/stdc++.h>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
int k[100001],tata[100001],ans[100001],drum[100001];

int main()
{
    int n,i,x,y,nod,sz,pasi;
    fin>>n;
    for(i=1;i<=n;i++)
    {
        fin>>k[i];
    }
    for(i=1;i<n;i++)
    {
        fin>>x>>y;
        tata[y]=x;
    }
    for(i=1;i<=n;i++)
    {
        nod=i;
        sz=0;
        while(nod!=0)
        {
            drum[sz]=nod;
            sz++;
            nod=tata[nod];
        }
        pasi=0;
        int idx=0;
        while(k[drum[idx]]!=0)
        {
            idx=idx+k[drum[idx]];
            pasi++;
        }
        ans[i]=pasi;
    }
    for(i=1;i<=n;i++)
    {
        fout<<ans[i]<<" ";
    }
    return 0;
}