Cod sursa(job #2981592)

Utilizator DKMKDMatei Filibiu DKMKD Data 18 februarie 2023 11:53:30
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.74 kb
#include <bits/stdc++.h>

using namespace std;

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

const int NMAX = 1e5+5;
int n,rad;
int stramos[NMAX],t[NMAX],drum[NMAX],sol[NMAX];
vector<int>g[NMAX];
void read(){
  fin>>n;
  for(int i=1;i<=n;++i)
    fin>>stramos[i];
  for(int i=1;i<=n-1;++i){
    int x,y;
    fin>>x>>y;
    g[x].push_back(y);
    t[y]=x;
  }
}
void dfs(int x,int nivel){
   drum[nivel]=x;
   if(stramos[x]!=0)
     sol[x]=1+sol[drum[nivel-stramos[x]]];
   for(auto i:g[x])
     dfs(i,nivel+1);
}
void solve(){
  for(int i=1;i<=n;++i)
    if(!t[i]){
      rad=i;
      break;
    }
  dfs(rad,0);
  for(int i=1;i<=n;++i)
    fout<<sol[i]<<" ";
}
int main(){
 read();
 solve();
 return 0;
}