Pagini recente » Cod sursa (job #20468) | Cod sursa (job #2811224) | Cod sursa (job #2177648) | Cod sursa (job #2221517) | Cod sursa (job #413941)
Cod sursa(job #413941)
#include<fstream>
#include<cstdio>
#define MAX 100001
using namespace std;
struct nod{
int info;
nod *next;
};
int c[MAX],niv[MAX],r[MAX],n,x;
nod *G[MAX];
void addmuchie(int x,int y)
{
nod *p=new nod;
p->info=y;
p->next=G[x];
G[x]=p;
}
void dfs(int k)
{
x++;
niv[x]=k;
if(c[k]!=0)
r[k]=niv[x-c[k]];
for(nod *p=G[k] ; p ;p=p->next)
dfs(p->info);
x--;
}
int cate(int k)
{
int rez=0;
while(r[k]!=0)
rez++,k=r[k];
return rez;
}
int main()
{
int i;
ifstream fin("cerere.in");
freopen("cerere.out","w",stdout);
fin>>n;
for(i=1;i<=n;i++)
fin>>c[i];
for(i=1;i<n;i++)
{
int x,y;
fin>>x>>y;
addmuchie(x,y);
}
dfs(1);
for(i=1;i<=n;i++)
{
printf("%d ",cate(i));
}
return 0;
}