Cod sursa(job #2615458)

Utilizator georgecristian2002Raducanu George-Cristian georgecristian2002 Data 14 mai 2020 17:08:39
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <fstream>
#include <vector>

using namespace std;

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

int n, vf;
int k[100005], ans[100005], tata[100005], st[100005];
int rmq[17][100005];
vector<int> v[100005];

void dfs(int x)
{
    st[++vf] = x;
    if(k[x] == 0)
        ans[x] = 0;
    else
        ans[x] = ans[st[vf - k[x]]] + 1;

    for(int i = 0; i < v[x].size(); i++)
        dfs(v[x][i]);
    vf--;
}

int main()
{
    ios::sync_with_stdio(false);
    int x, y;
    fin>>n;
    for(int i = 1; i <= n; ++i)
        fin>>k[i];

    for(int i = 1; i < n; ++i)
    {
        fin>>x>>y;
        tata[y] = x;
        v[x].push_back(y);
    }
    for(int i = 1; i <= n; ++i)
        if(tata[i] == 0)
        {
            dfs(i);
            break;
        }

    for(int i = 1; i <= n; ++i)
        fout<<ans[i]<<' ';
    fin.close();
    fout.close();
    return 0;
}