Pagini recente » Cod sursa (job #1026759) | Cod sursa (job #303551) | Cod sursa (job #1101031) | Cod sursa (job #1005354) | Cod sursa (job #1942325)
#include <iostream>
#include <fstream>
#include <vector>
#define N 100005
#define pb push_back
using namespace std;
ifstream in("cerere.in");
ofstream out("cerere.out");
vector<int> v[N], s;
int n, c[N], r[N], t[N];
void dfs(int x){
if(c[x]>0)r[x]=1+r[s[s.size()-c[x]]];
s.pb(x);
for(int i=0; i<v[x].size(); i++)dfs(v[x][i]);
s.pop_back();
}
int main(){
in>>n;
int x, y, root;
for(int i=1; i<=n; i++)in>>c[i];
for(int i=1; i<n; i++)in>>x>>y,v[x].pb(y),t[y]=x;
for(int i=1; i<=n; i++){
if(!t[i]){
root=i;
break;
}
}
dfs(root);
for(int i=1; i<=n; i++)out<<r[i]<<" ";
return 0;
}