Cod sursa(job #3364493)

Utilizator TudorMitMituca Tudor TudorMit Data 3 septembrie 2026 21:52:54
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <fstream>
#include <vector>
using namespace std;

ifstream cin("cerere.in");
ofstream cout("cerere.out");

vector<int>ad[100005];

int v[100005],rez[100005],dr[100005];
bool nrad[100005];

void dfs(int x,int grad){
    dr[grad]=x;
    if(v[x]==0)
        rez[x]=0;
    else
        rez[x]=rez[dr[grad-v[x]]]+1;
    for(int i=0;i<ad[x].size();i++)
        dfs(ad[x][i],grad+1);
}

int main()
{
    int n,a,b,rad;
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>v[i];
    for(int i=1;i<n;i++){
        cin>>a>>b;
        ad[a].push_back(b);
        nrad[b]=true;
    }
    for(int i=1;i<=n;i++)
        if(nrad[i]==false){
            rad=i;
            break;
        }
    dfs(rad,0);
    for(int i=1;i<=n;i++)
        cout<<rez[i]<< " ";
    return 0;
}