Cod sursa(job #3313155)

Utilizator petric_mariaPetric Maria petric_maria Data 2 octombrie 2025 17:55:13
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");

int n, a[100005], t[100005], x, y, h[100005], s, ans[100005], vis[100005];
vector <int> v[100005];

void dfs (int k, int val) {
    vis[k] = 1;
    for (auto x: v[k])
        if (!vis[x]) {
            h[val + 1] = x;
            if (a[x] == 0)
                ans[x] = 0;
            else
                ans[x] = ans[ h[val + 1 - a[x]] ] + 1;
//            cout << x << ' ' << val+1 << ' ' <<
//                val+1-a[x] << ' ' << ans[x] << endl;
            dfs (x, val+1);
        }
}

int main()
{
    f >> n;
    for (int i=1; i<=n; ++i)
        f >> a[i];
    for (int i=1; i<n; ++i) {
        f >> x >> y;
        v[x].push_back (y);
        t[y] = x;
    }
    for (int i=1; i<=n; ++i)
        if (t[i] == 0)
            s = i;
    h[s] = 0;  ans[s] = 0;  h[0] = s;
    dfs (s, 0);

    for (int i=1; i<=n; ++i)
        g << ans[i] << ' ';
    return 0;
}