Cod sursa(job #2135074)

Utilizator tifui.alexandruTifui Ioan Alexandru tifui.alexandru Data 18 februarie 2018 16:21:21
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.65 kb
#include <bits/stdc++.h>
#define Nmax 100001
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
int k[Nmax];
int ans[Nmax];
int t[Nmax];
int stk[Nmax];
list <int> arb[Nmax];
void DFS(int x, int lvl)
{
    stk[lvl]=x;
    if(k[x]) ans[x]=1+ans[stk[lvl-k[x]]];
    for(const auto &it:arb[x])
        DFS(it,lvl+1);
}
int main()
{
    int n,i,j,d;
    f>>n;
    for(i=1;i<=n;i++)
        f>>k[i];
    for(d=1;d<n;d++)
    {
        f>>i>>j;
        t[j]=i;
        arb[i].push_back(j);
    }
    int root=1;
    for(;t[root];root++);
    DFS(root,1);
    for(i=1;i<=n;i++)
        g<<ans[i]<<' ';

    return 0;
}