Pagini recente » Cod sursa (job #2780167) | Cod sursa (job #2049331) | Autentificare | Cod sursa (job #2195871) | Cod sursa (job #1757069)
#include <fstream>
#include<vector>
#define Nmax 100005
using namespace std;
ifstream fin ("cerere.in");
ofstream fout("cerere.out");
vector <int> v[Nmax];
int n, k[Nmax], rad, tata[Nmax], st[Nmax], niv, sol[Nmax];
void read(){
int a, b;
fin>>n;
for(int i=1;i<=n;i++)
fin>>k[i];
for(int i=1;i<=n-1;i++){
fin>>a>>b;
v[a].push_back(b);
tata[b]=a;
}
for(int i=1;i<=n;i++)
if(tata[i]==0)
rad=i;
}
void dfs(int rad,int niv){
st[niv]=rad;
if(niv-k[rad]>0)
sol[rad]=sol[st[niv-k[rad]]]+1;
for(int i=0;i<v[rad].size();i++)
dfs(v[rad][i],niv+1);
}
int main()
{
read();
dfs(rad,1);
for(int i=1;i<=n;i++)
fout<<sol[i]-1<<" ";
return 0;
}