Cod sursa(job #2615452)

Utilizator isa_tudor_andreiAndrei Tudor isa_tudor_andrei Data 14 mai 2020 17:03:54
Problema Cerere Scor 95
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <fstream>
#include <vector>

using namespace std;

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

const int NMAX = 100000;

int lista[NMAX + 1], f[NMAX + 1];
int nr, dp[NMAX + 1], k[NMAX + 1];
vector<int> G[NMAX + 1];

void dfs( int node, int father ) {
  lista[++nr] = node;
  dp[node] = (dp[lista[nr - k[node]]] + 1) * (k[node] != 0);
  for( const auto &it : G[node] ) {
    if( it != father )
      dfs(it, node);
  }
  nr --;
}

int main() {
    int n;
    fin>>n;
    for( int i = 1; i <= n; i ++ ) {
      fin>>k[i];
    }
    for( int i = 1; i < n; i ++ ) {
      int a, b;
      fin>>a>>b;
      G[a].push_back(b);
      G[b].push_back(a);
      f[b]++;
    }
    int rad;
    for( int i = 1; i <= n; i ++ )
      if( f[i] == 0 )
        rad = i;
    dfs(rad, 0);
    for( int i = 1; i <= n; i ++ )
      fout<<dp[i]<<" ";
    return 0;
}