Pagini recente » Cod sursa (job #2395336) | Cod sursa (job #2803971) | Cod sursa (job #1023229) | Cod sursa (job #2252590) | Cod sursa (job #633050)
Cod sursa(job #633050)
#include<cstdio>
#include<deque>
#include<vector>
#define LEN 100005
using namespace std;
vector<int> v[LEN];
deque<int> d;
bool notroot[LEN];
int k[LEN],s[LEN],ans[LEN];
void dfs(int x){
s[x]=1;
d.push_front(x);
if(k[x])
ans[x]=ans[d[k[x]]]+1;
for(int i=0;i<v[x].size();i++)
if(!s[v[x][i]])
dfs(v[x][i]);
d.pop_front();
}
int main(){
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",k+i);
for(int i=0;i<n-1;i++){
int x,y;
scanf("%d%d",&x,&y);
notroot[y]=1;
v[x].push_back(y);
}
int r;
for(r=1;r<=n;r++)
if(!notroot[r])break;
dfs(r);
for(int i=1;i<=n;i++)
printf("%d ",ans[i]);
}