Pagini recente » Cod sursa (job #1763697) | Cod sursa (job #837740) | Cod sursa (job #569146) | Cod sursa (job #1505684) | Cod sursa (job #1770115)
#include <iostream>
#include <fstream>
#include <vector>
#include <iterator>
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
int node[100001],a[100001],n,st[100001],top;
vector <int> v[100001];
void dfs(int vertex ,int level )
{
st[top++]=vertex;
if(a[vertex])
node[vertex]=node[st[level-a[vertex]]]+1;
else node[vertex]=0;
for(vector<int>::iterator it=v[vertex].begin();it!=v[vertex].end();it++)
dfs(*it,level+1);
top--;
}
int main()
{
f >> n ;
for(int i=1;i<=n;i++)
f>> a[i];
int child,parent;
for(int i=1;i<n;i++)
{
f>> parent >> child;
v[parent].push_back(child);
}
int root=1;
dfs(root,0);
for(int i=1;i<=n;i++)
{
g << node[i] << " ";
}
return 0;
}