Pagini recente » Cod sursa (job #1459979) | Cod sursa (job #989963) | Cod sursa (job #2039818) | Cod sursa (job #1362458) | Cod sursa (job #1336268)
#include <cstdio>
#include <fstream>
#include <vector>
#define nmax 100005
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
vector <int> v[nmax];
int n,viz[nmax],st[nmax];
int sol[nmax],k[nmax];
void dfs(int x,int niv)
{
viz[x]=1;
st[niv]=x;
if (k[x]==0)
sol[x]=0;
else
sol[x]=sol[st[niv-k[x]]]+1;
for (vector <int> :: iterator it=v[x].begin();it!=v[x].end();it++) {
if (viz[*it]==0) {
dfs(*it,niv+1);
}
}
}
int main()
{
int i,a,b;
f>>n;
for (i=1;i<=n;i++)
f>>k[i];
for (i=1;i<=n-1;i++) {
f>>a>>b;
v[a].push_back(b);
}
dfs(1,1);
for (i=1;i<=n;i++) g<<sol[i]<<' ';
return 0;
}