Pagini recente » Cod sursa (job #2240926) | Cod sursa (job #2529682) | Cod sursa (job #2560790) | Cod sursa (job #298795) | Cod sursa (job #1393105)
#include <cstdio>
#include <vector>
using namespace std;
int dest[100001],stiva[100001],v[100001];
vector<int> adj[100001];
int n;
void dfs(int nod,int pos)
{
stiva[pos]=nod;
dest[nod]=stiva[pos-v[nod]];
vector<int>::iterator it;
for(it=adj[nod].begin();it!=adj[nod].end();++it) dfs(*it,pos+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",&v[i]);
int p1,p2;
int sumt,sum=0;
if(n%2==0)
{
sumt=n/2;
sumt*=(n+1);
}
else
{
sumt=(n+1)/2;
sumt*=n;
}
for(int i=1;i<n;i++)
{
scanf("%d%d",&p1,&p2);
adj[p1].push_back(p2);
sum+=p2;
}
v[sumt-sum]=0;
dfs(1,1);
for(int i=1;i<=n;i++)
{
int counter=0,nod=i;
while(v[nod]!=0)
{
nod=dest[nod];
counter++;
}
printf("%d ",counter);
}
}