Cod sursa(job #3375346)

Utilizator rucimangeac ruxandra ruci Data 11 noiembrie 2026 13:30:22
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Teme Pregatire ACM Unibuc 2013 Marime 1.08 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("cerere.in");
ofstream g("cerere.out");

int rezultat[100001];
vector<int>stiva;
int are_tata[100001];
vector<int> fii[100005];
int v[100001];
vector<int>q;
int radacina;

void dfs(int nod)
{
    if(nod != radacina and v[nod] > 0)
    {
        int point_stramos = q.size() - v[nod];
        int stramos = q[point_stramos];
        rezultat[nod] = 1 + rezultat[stramos];
    }
    else
        rezultat[nod] = 0;

    q.push_back(nod);

    for(int i = 0; i < fii[nod].size(); i++)
    {
        int fiu = fii[nod][i];
        dfs(fiu);
    }
    q.pop_back();
}

int main()
{
    int n,i,x,y;
    f >> n;
    for(i = 1; i <= n; i++)
    {
        f >> v[i];
    }
    for(i = 1; i < n; i++)
    {
        f >> x >> y;
        fii[x].push_back(y);
        are_tata[y] = 1;
    }
    for(i = 1; i <= n; i++)
    {
        if(are_tata[i] == 0)
            radacina = i;
    }
    dfs(radacina);
    for(i = 1; i <= n; i++)
    {
        g << rezultat[i] << " ";
    }
    return 0;
}