Cod sursa(job #781799)

Utilizator ionut_blesneagIonut Blesneag ionut_blesneag Data 25 august 2012 02:00:14
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include<cstdio>
#include<list>
using namespace std;

int n,i,x,y,root,size;
int t[100001],stiva[100001],q[100001],ans[100001];
list<int> L[100001];

void DFS(int x)
{size++;
stiva[size]=x;
if(q[x]==0)
  ans[x]=0;
else
  ans[x]=ans[stiva[size-q[x]]]+1;  
list<int>::iterator it;
for(it=L[x].begin(); it!=L[x].end(); it++)
  DFS(*it); 
size--;  
}

int main()
{freopen ("cerere.in","r",stdin);
freopen ("cerere.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
  scanf("%d",&q[i]);
for(i=1;i<=n-1; i++)
  {scanf ("%d %d",&x,&y);
   L[x].push_back(y);
   t[y]=x;}
for(i=1;i<=n;i++)
  if(t[i]==0)
    {root=i;
    break;}  
DFS(root);    
for(i=1; i<=n; i++)
 printf("%d ",ans[i]);    
return 0;
}