Pagini recente » Cod sursa (job #3198106) | Cod sursa (job #1204507) | Cod sursa (job #3168385) | Cod sursa (job #878878) | Cod sursa (job #1235287)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
vector <int> L[100100];
int a,b, D[100100],n,N[100100],i,v[100100],k[100100],v2[100100],t[100100];
void dfs(int nod, int niv){
N[niv]=nod;
v[nod]=1;
for(int i=0;i<L[nod].size();i++)
if(v[L[nod][i]] == 0)
dfs(L[nod][i],niv+1);
int x=niv;
while(k[N[x]] && v2[nod]==0){
D[nod]++;
x-=k[N[x]];
}
v2[nod]=1;
}
int main()
{
fin>>n;
for(i=1;i<=n;i++)
fin>>k[i];
for(i=1;i<n;i++){
fin>>a>>b;
L[a].push_back(b);
t[b]=a;
}
for(i=1;i<=n;i++)
if(t[i]==0)
break;
dfs(i,1);
for(i=1;i<=n;i++)
fout<<D[i]<<" ";
return 0;
}