Cod sursa(job #1614620)

Utilizator RadduFMI Dinu Radu Raddu Data 26 februarie 2016 00:29:02
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.61 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
vector <int> v[100005];
int n,gr[100005],val[100005],dp[100005],k,a[100005];

void DFS(int x)
{ int i;
  k++; a[k]=x;
  if (val[x]) dp[x]=dp[a[k-val[x]]]+1;
  for(i=0;i<v[x].size();i++)
   DFS(v[x][i]);
  k--;
}
int main()
{ int i,x,y;
   f>>n;
   for(i=1;i<=n;i++)
    f>>val[i];

   for(i=1;i<n;i++)
   { f>>x>>y;
      v[x].push_back(y);
     gr[y]++;
   }

   for(i=1;i<=n;i++)
    if (!gr[i]) DFS(i);

   for(i=1;i<=n;i++)
    g<<dp[i]<<" ";
    return 0;
}