Cod sursa(job #63005)

Utilizator crawlerPuni Andrei Paul crawler Data 25 mai 2007 14:26:50
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <cstdio>
#include <vector>
#include <bitset>

using namespace std;

#define Nmax 100100
#define Hmax 10
#define pow(q) (1<<(q))

int up[Nmax], st[Nmax], nr[Nmax], H = 0;
vector<int> l[Nmax];
bitset<Nmax> poate;

void DF(int nod)
 {
  st[++H] = nod;
  if(poate[nod])
   nr[nod] = 0;
    else
   nr[nod] = nr[st[H-up[nod]]] + 1;

  for(int i=0;i<l[nod].size();++i)
   DF(l[nod][i]);
 
  --H;
 }


int main()
 {
  freopen("cerere.in","r",stdin);
  freopen("cerere.out","w",stdout);

  int n, i, a,b;

  scanf("%d", &n);

  for(i=1;i<=n;++i)
   {
    scanf("%d",up+i);
    if(up[i] == 0)
     poate[i] = 1;
   }

  int sef = 0;

  for(i=1;i<n;++i)
   {
    scanf("%d%d",&a,&b);
    l[a].push_back(b);
    sef^= i^b;
   }

  DF(sef^n);

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

  return 0;
 }