Cod sursa(job #1364736)

Utilizator robertstrecheStreche Robert robertstreche Data 27 februarie 2015 19:58:25
Problema Cerere Scor 100
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2013 Marime 0.86 kb
#include <cstdio>
#include <vector>
#include <bitset>

#define NMAX 100005

using namespace std;

int n,x,y;
int nr[NMAX],s[NMAX],sus[NMAX];

bitset <NMAX>ap,rad;
vector <int>v[NMAX];

inline void dfs(int nod,int nivel)
{
    ap[nod]=1;
    s[nivel]=nod;
    nr[nod]=sus[nod]?(1+nr[s[nivel-sus[nod]]]):0;
    for (vector <int>::iterator it=v[nod].begin();it!=v[nod].end();it++)
       if (ap[*it]==0)dfs(*it,nivel+1);
}
int main()
{
   freopen("cerere.in","r",stdin);
   freopen("cerere.out","w",stdout);

   scanf("%d",&n);

   for (int i=1;i<=n;i++)
    scanf("%d",&sus[i]);
   for (int i=1;i<n;i++)
   {
       scanf("%d %d",&x,&y);
       v[x].push_back(y);
       rad[y]=1;
   }
   for (int i=1;i<=n;i++)
    if (rad[i]==0)dfs(i,1);

   for (int i=1;i<=n;i++)
     printf("%d ",nr[i]);

   fclose(stdin);
   fclose(stdout);
}