Pagini recente » Cod sursa (job #2396518) | Cod sursa (job #42090) | Cod sursa (job #539240) | Cod sursa (job #2138123) | Cod sursa (job #1033658)
#include<stdio.h>
#include<vector>
#define INF 100001
using namespace std;
vector<int> graph[INF];
int k[INF],ras[INF];
int n;
bool viz[INF];
vector<int> q;
void df(int nod)
{
viz[nod]=true;
q.push_back(nod);
if(k[nod]>0)ras[nod]=ras[q[q.size()-k[nod]-1]]+1;
for(int i=0;i<graph[nod].size();++i)if(!viz[graph[nod][i]])df(graph[nod][i]);
q.pop_back();
}
bool check[INF];
int main()
{
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;++i)scanf("%d",&k[i]);
for(int i=1;i<n;++i)
{
int a,b;
scanf("%d%d",&a,&b);
graph[a].push_back(b);
check[b]=true;
}
int rad=1;
for(int i=1;i<=n;++i)if(!check[i]){rad=i;break;}
df(rad);
for(int i=1;i<=n;++i)printf("%d ",ras[i]);
return 0;
}