Pagini recente » Cod sursa (job #316374) | Cod sursa (job #1401496) | Cod sursa (job #3225496) | Cod sursa (job #3163030) | Cod sursa (job #1393130)
#include <cstdio>
#include <vector>
using namespace std;
int stiva[150001],s[100001],v[100001];
vector<int> adj[150001];
int n;
void dfs(int nod,int pos)
{
stiva[pos]=nod;
if(v[nod]!=0&&pos!=1) s[nod]=s[stiva[pos-v[nod]]]+1;
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;
long long sumt=(long long)n*(n+1)/2;
for(int i=1;i<n;i++)
{
scanf("%d%d",&p1,&p2);
adj[p1].push_back(p2);
sumt-=p2;
}
dfs(sumt,1);
for(int i=1;i<=n;i++)
{
printf("%d ",s[i]);
}
}