Cod sursa(job #3338196)

Utilizator Err0rSome Error Err0r Data 1 februarie 2026 14:11:02
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <fstream>
#include <climits>
#include <algorithm>
#include <vector>
#include <cstring>
#define DIM 100001
using namespace std;

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

// declaring
vector <int> l[DIM];
int k[DIM],n,sol[DIM],s[DIM],r,t[DIM],x,y;

/// dfs function
void dfs(int nod, int niv)
{
   s[niv]=nod;
   if (k[nod]==0){
      sol[nod]=0;
   }
   else{
      sol[nod]=1+sol[s[niv-k[nod]]];
   }
   for (int i=0;i<l[nod].size();i++){
      dfs(l[nod][i],niv+1);
   }
}


   int main()
   {
      ////reading
      cin >> n;
      for (int i=1;i<=n;i++){
         cin >> k[i];
      }
      for (int i=1;i<n;i++){
         cin >> x>> y;
         l[x].push_back(y);
         t[y]=x;
      }

      ///finding the root
      for (int i=1;i<=n;i++){
         if (t[i]==0){
            r=i;
         }
      }

      ////algorithm
      dfs(r,1);

      
      ////outputting
      for (int i=1;i<=n;i++){
         cout << sol[i] << " ";
      }

      // test
      /*for (int i=1;i<=n;i++){
         cout << k[i] << " ";
      }
      cout << endl;
      for (int i=1;i<=n;i++){
         for (int j=0;j<l[i].size();j++){
            cout << l[i][j]<<" ";
         }
         cout << endl;
      }
      for (int i=1;i<=n;i++){
         cout << t[i]<< " ";
      }*/
     }