Cod sursa(job #2542240)

Utilizator nicolaee2Martinescu Nicolae nicolaee2 Data 9 februarie 2020 18:57:03
Problema Cerere Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <bits/stdc++.h>

#define NMAX 100005
using namespace std;

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

int n;
int t[NMAX];
int val[NMAX];
int sol[NMAX];

vector<int> ma[NMAX];
vector<int> S;

void citire()
{
   fin>>n;
   for(int i=1;i<=n;i++)
   {
      fin>>val[i];
   }
   for(int i=1;i<=n-1;i++)
   {
      int x,y;
      fin>>x>>y;
      t[y] = x;
      ma[x].push_back(y);
   }

}


void DFS(int n)
{
   S.push_back(n);

   if(val[n]!=0)
      sol[n] = sol[S.size()-1-val[n]]+1;

   for(int i=0;i<ma[n].size();i++)
      DFS(ma[n][i]);

   S.pop_back();

}

void rezolva()
{
   int r;
   for(int i=1;i<=n;i++)
   {

      if(!t[i])
      {
         r = i;
         break;
      }
   }

   DFS(r);
   for(int i=1;i<=n;i++)
      fout<<sol[i]<<" ";

}

int main()
{
   citire();
   rezolva();
}