Cod sursa(job #2813148)

Utilizator AndreiCroitoruAndrei Croitoru AndreiCroitoru Data 5 decembrie 2021 20:49:05
Problema Cerere Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <bits/stdc++.h>

using namespace std;

vector <int> g[100005];

int ans[100005], v[100005], P[100005];
bool ok[100005];

void dfs(int aux, int niv)
{
    ok[aux] = 1;
    P[niv] = aux;
    ans[aux] = ans[P[niv-v[aux]]] + 1;
    for(auto x : g[aux])
    {
        int y = x;
        if(!ok[y])
        {
            dfs(y, niv+1);
        }
    }

}

int main()
{
    ifstream cin("cerere.in");
    ofstream cout("cerere.out");
    int n;
    cin >> n;
    for(int i = 1; i <= n; i++)
    {
        cin >> v[i];
        ans[i] = -1;
    }
    int x = n * (n + 1) / 2;
    int a, b;
    for(int i = 1; i <= n - 1; i++)
    {
        cin >> a >> b;
        g[a].push_back(b);
        x -= b;
    }
    dfs(x, 1);
    for(int i = 1; i <= n; i++)
    {
        cout << ans[i] << " ";
    }
    return 0;
}