Cod sursa(job #2443523)

Utilizator stefantagaTaga Stefan stefantaga Data 28 iulie 2019 13:55:13
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

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

int const nmax = 100000;

vector<int> g[5 + nmax];
int dp[5 + nmax];
int w[5 + nmax];
int up[5 + nmax];
int upd = 0;
void dfs(int node)
{
  up[++upd] = node;
  if(w[node] == 0)
    dp[node] = 0;
  else
    dp[node] = dp[up[upd - w[node]]] + 1;
  for(int h = 0 ; h < g[node].size() ;h++){
    dfs(g[node][h]);
  }
  upd--;
}
int spec[5 + nmax];
int seen[5 + nmax];

int main()
{
  int n;
  in>>n;
  for(int i = 1 ; i <= n ;i++){
    in>>w[i];
  }
  for(int i = 1 ; i < n ;i++){
    int a , b;
    in>>a>>b;
    g[a].push_back(b);
    seen[b] = 1;
  }
  for(int i = 1 ; i <= n ;i++){
    if(seen[i] == 0)
      dfs(i);
  }
  for(int i = 1 ;i <= n ;i++){
    out<<dp[i]<<" ";
  }
  return 0;
}