Pagini recente » Cod sursa (job #112469) | Cod sursa (job #1203144) | Cod sursa (job #886105) | Cod sursa (job #739553) | Cod sursa (job #2777904)
#include <bits/stdc++.h>
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
const int N = 1e5 + 1;
int n, k[N], x, y, ans[N], tata[N], stramos[N];
vector<int> c[N];
void dfs(int nod, int distDeLaRadacina){
stramos[distDeLaRadacina] = nod;
ans[nod] = ans[stramos[distDeLaRadacina - k[nod]]] + 1;
for(auto y: c[nod])
dfs(y, distDeLaRadacina + 1);
}
int main(){
f >> n;
for(int i = 1; i <= n; i++){
ans[i] = -1;
f >> k[i];
}
for(int i = 1; i < n; i++){
f >> x >> y;
tata[y] = x;
c[x].push_back(y);
}
f.close();
for(int i = 1; i <= n; i++){
if(tata[i] == 0){
dfs(i, 0);
break;
}
}
for(int i = 1; i <= n; i++)
g << ans[i] << ' ';
g.close();
}