Pagini recente » Cod sursa (job #3040686) | Cod sursa (job #2960074) | Cod sursa (job #368317) | Cod sursa (job #1306749) | Cod sursa (job #413950)
Cod sursa(job #413950)
#include<fstream>
#include<cstdio>
#define MAX 100001
using namespace std;
struct nod{
int info;
nod *next;
};
int c[MAX],niv[MAX],t[MAX],r[MAX],n,x;
nod *G[MAX];
inline 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 main()
{
int i,rad=0;
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);
t[y]=x;
}
for(i=1;i<=n && rad==0;i++)
if(t[i]==0)
rad=i;
dfs(rad);
for(i=1;i<=n;i++)
{
int x=i,q=0;
while(r[x])
q++,x=r[x];
printf("%d ",q);
}
return 0;
}