Cod sursa(job #3298743)

Utilizator Carnu_EmilianCarnu Emilian Carnu_Emilian Data 1 iunie 2025 11:58:59
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fcin("cerere.in");
ofstream fcout("cerere.out");
typedef long long ll;

const int N = 1e5 + 5;
int mystack[N], v[N], r[N], f[N];
int n, a, b, dr, rad;
ll s;
vector<vector<int>> h(N);

void DFS1(int nod)
{
    mystack[++dr] = nod;
    r[nod] = mystack[dr - v[nod]];
    for (int e : h[nod])
        DFS1(e);
    dr--;
}

void DFS2(int nod)
{
    f[nod] = 1 + f[r[nod]];
    for (int e : h[nod])
        DFS2(e);
}

int main()
{
    fcin >> n;
    s = 1ll * n * (n + 1) / 2;
    for (int i = 1; i <= n; i++)
        fcin >> v[i];
    for (int i = 1; i < n; i++)
    {
        fcin >> a >> b;
        s -= b;
        h[a].push_back(b);
    }
    rad = s;
    DFS1(rad);
    DFS2(rad);
    for (int i = 1; i <= n; i++)
        fcout << f[i] - 1 << ' ';

    fcin.close();
    fcout.close();
    return 0;
}