Pagini recente » Cod sursa (job #1747093) | Cod sursa (job #67613) | Cod sursa (job #2399598) | Cod sursa (job #3152916) | Cod sursa (job #2923470)
#include <bits/stdc++.h>
using namespace std;
ifstream r("cerere.in");
ofstream w("cerere.out");
int n, aux, k[100003], t[100003], s[100003], sol[100003];
vector<int> l[100003];
void dfs(int nod,int niv) {
s[niv]=nod;
if (k[nod]==0){
sol[nod]=0;
}
else{
sol[nod]=1+sol[s[niv-k[nod]]];
}
for (int i=0;i<l[nod].size();i++){
dfs(l[nod][i],niv+1);
}
}
int main() {
r>>n;
for (int i=1;i<=n;i++){
r>>k[i];
}
for (int i=1;i<n;i++) {
int x, y;
r>>x>>y;
l[x].push_back(y);
t[y]=x;
}
for (int i=1;i<=n;i++){
if (t[i]==0) {
aux=i;
break;
}
}
dfs(aux,1);
for (int i=1;i<=n;i++){
w<<sol[i]<<" ";
}
return 0;
}