Pagini recente » Cod sursa (job #2203658) | Cod sursa (job #1580243) | Cod sursa (job #1234549) | Cod sursa (job #2905386) | Cod sursa (job #3304717)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
const int NMAX=100000;
vector<int> monkey(NMAX+5), walk, ans(NMAX+5, -1);
vector<bool> used(NMAX+5);
vector<int> muchii[NMAX+5];
void dfs(int node, int nivel){
used[node]=1;
walk.push_back(node);
ans[node]=1+ans[walk[nivel-monkey[node]]];
for(auto it:muchii[node]){
if(used[it]==0){
dfs(it, nivel+1);
}
}
walk.resize(walk.size()-1);
}
int main(){
int n, radacina=0;
fin>>n;
for(int i=1;i<=n;i++){
fin>>monkey[i];
radacina^=i;
}
for(int i=1;i<=n-1;i++){
int a, b;
fin>>a>>b;
muchii[a].push_back(b);
muchii[b].push_back(a);
radacina^=b;
}
dfs(radacina,0);
for(int i=1;i<=n;i++){
fout<<ans[i]<<' ';
}
}