Cod sursa(job #3003640)

Utilizator pifaDumitru Andrei Denis pifa Data 15 martie 2023 20:35:51
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <bits/stdc++.h>

using namespace std;

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

const int N = 1e5 + 5;

vector <int> g[N];

int n;

int k[N];

int s[N], sol[N];

void dfs(int nod, int lev)
{
    s[lev] = nod;
    if(k[nod] == 0)
        sol[nod] = 0;
    else
        sol[nod] = 1 + sol[ s[lev - k[nod]] ];
    for(int i = 0; i < g[nod].size(); i++)
        dfs(g[nod][i], lev + 1);
}

int t[N];

int main()
{
    in >> n;
    for(int i = 1; i <= n; i++)
        in >> k[i];
    for(int i = 1; i < n; i++)
    {
        int x, y;
        in >> x >> y;
        g[x].push_back(y);
        t[y] = x;
    }
    int root = 0;
    for(int i = 1; i <= n; i++)
    {
        if(t[i] == 0)
        {
            root = i;
            break;
        }
    }
    dfs(root, 1);
    for(int i = 1; i <= n; i++)
        out << sol[i] << ' ';
    return 0;
}