Pagini recente » Cod sursa (job #2636845) | Cod sursa (job #454919) | Cod sursa (job #2870436) | Cod sursa (job #2775487) | Cod sursa (job #1025503)
#include<fstream>
#include<vector>
using namespace std;
#define NMAX 100005
ifstream fin("cerere.in");
ofstream fout("cerere.out");
vector <int> a[NMAX];
int n,x,y,G[NMAX],A[NMAX],S[NMAX];
bool M[NMAX];
void dfs(int s, int niv)
{
int i;
A[niv]=s;
if (!G[s]) S[s]=0;
else S[s]=S[A[niv-G[s]]]+1;
for (i=0;i<a[s].size();++i)
dfs(a[s][i],niv+1);
}
int main()
{
int i;
fin>>n;
for (i=1;i<=n;++i)
fin>>G[i];
for (i=1;i<n;++i)
{
fin>>x>>y;
a[x].push_back(y);
M[y]=true;
}
for (i=1,x=0;i<=n && !x;++i)
if (!M[i]) x=i;
dfs(x,1);
for (i=1;i<=n;++i)
fout<<S[i]<<' ';
fout<<'\n';
return 0;
}