Pagini recente » Cod sursa (job #232833) | Cod sursa (job #1341639) | Cod sursa (job #2035117) | Cod sursa (job #1662049) | Cod sursa (job #2171887)
#include <fstream>
#include <vector>
#define nmax 100001
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
int k[nmax],t[nmax],rez[nmax],n;
vector <int> G[nmax];
vector <int> arb;
void dfs(int nod)
{
if(k[nod]!=0)
rez[nod]=rez[arb[arb.size()-k[nod]]]+1;
arb.push_back(nod);
for(int i=0;i<G[nod].size();i++)
dfs(G[nod][i]);
arb.pop_back();
}
int main()
{
fin>>n;
for(int i=1;i<=n;i++)
fin>>k[i];
for(int i=1;i<=n-1;i++)
{
int a,b;
fin>>a>>b;
G[a].push_back(b);
t[b]=a;
}
int r;
for(int i=1;i<=n;i++)
if(t[i]==0)
{
r=i;
break;
}
dfs(r);
for(int i=1;i<=n;i++)
fout<<rez[i]<<" ";
return 0;
}