Cod sursa(job #2439258)

Utilizator IoanaDraganescuIoana Draganescu IoanaDraganescu Data 15 iulie 2019 15:28:28
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

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

vector <int> g[100005];
int n, poz, k[100005], nr[100005], s[100005];
bool tata[100005];

void read(){
    fin >> n;
    for (int i = 1; i <= n; i++)
        fin >> k[i];
    for (int i = 1; i < n; i++){
        int a, b;
        fin >> a >> b;
        g[a].push_back(b);
        tata[b] = 1;
    }
}

void dfs(int nod){
    s[++poz] = nod;
    if (k[nod] > 0)
        nr[nod] = 1 + nr[s[poz - k[nod]]];
    for (auto i : g[nod])
        dfs(i);
    poz--;
}

void solve(){
    int rad = 0;
    for (int i = 1; i <= n; i++)
        if (!tata[i])
            rad = i;
    dfs(rad);
    for (int i = 1; i <= n; i++)
        fout << nr[i] << ' ';
    fout << '\n';
}

int main()
{
    read();
    solve();
    return 0;
}