Pagini recente » Cod sursa (job #572828) | Cod sursa (job #1535071) | Cod sursa (job #1601319) | Cod sursa (job #3290442) | Cod sursa (job #2563831)
#include <iostream>
#include <fstream>
#include <vector>
#define nmax 100001
using namespace std;
ifstream f("cerere.in");
ofstream o("cerere.out");
vector<int> g[nmax];
int i,n,x,y,t[nmax],k[nmax],sol[nmax],nodram[nmax]; // nodul de pe ramura curenta, pt fiecare nivel in parte
void dfs(int x, int niv){
nodram[niv]=x;
if(k[x])
sol[x]=sol[nodram[niv-k[x]]]+1;
else
sol[x]=0;
int l=g[x].size(),v;
for(int i=0;i<l;++i)
dfs(g[x][i], niv+1);
}
int main()
{
f >> n;
for(i=1;i<=n;++i)
f >> k[i];
for(i=1;i<n;++i){
f >> x >> y;
t[y]=x;
g[x].push_back(y);
}
for(i=1;i<=n;++i){
if(!t[i]){
dfs(i,0);
break;
}
}
for(i=1;i<=n;++i)
o << sol[i] << " ";
return 0;
}