Cod sursa(job #2778154)

Utilizator VipioanaMirea Oana Teodora Vipioana Data 29 septembrie 2021 15:50:02
Problema Cerere Scor 85
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.66 kb
#include <bits/stdc++.h>
#define N 100001

using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
int n,str[N],nr[N],p[N],br[N];
vector <int> a[N];

void dfs(int x, int lvl)
{
   br[lvl]=x;
   if(str[x])
    nr[x]=nr[br[lvl-str[x]]]+1;
   for(int j:a[x])
    dfs(j,lvl+1);
}

int find_root(int x){
    while(p[x])
        x=p[x];
    return x;
}

int main()
{
    f>>n;
    for(int i=1; i<=n; i++)
        f>>str[i];
    for(int i=1; i<=n-1; i++){
        int x,y;
        f>>x>>y;
        a[x].push_back(y);
        p[y]=x;
    }
    dfs(find_root(1),0);
    for(int i=1; i<=n; i++)
        g<<nr[i]<<" ";
    return 0;
}