Pagini recente » Cod sursa (job #2440259) | Cod sursa (job #643583) | Cod sursa (job #1243312) | Cod sursa (job #1674398) | Cod sursa (job #2777841)
#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){
if(ans[nod] == -1)
ans[nod] = ans[stramos[distDeLaRadacina - k[nod]]] + 1;
stramos[distDeLaRadacina] = nod;
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];
if(k[i] == 0)
ans[i] = 0;
}
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();
}