Pagini recente » Cod sursa (job #1464383) | Cod sursa (job #2637684) | Cod sursa (job #2507030) | Cod sursa (job #2386449) | Cod sursa (job #2310915)
#include <fstream>
#include <vector>
using namespace std;
ifstream in("cerere.in");
ofstream out("cerere.out");
int n,k[100001],x,y,r,s[100001],t[100001];
bool f[100001];
vector <int> a[100001];
void dfs(int v,int n)
{ f[v]=1;
s[n]=v;
if(k[v]>0)
t[v]=t[s[n-k[v]]]+1;
vector <int>::iterator it;
for(it=a[v].begin();it!=a[v].end();it++)
if(!f[*it])
dfs(*it,n+1);
}
int main()
{ in>>n;
for(int i=1;i<=n;i++)
in>>k[i];
for(int i=1;i<n;i++)
in>>x>>y,f[y]=1,a[x].push_back(y);
for(int i=1;i<=n && !r;i++)
if(!f[i])
r=i;
for(int i=1;i<=n;i++)
f[i]=0;
dfs(r,1);
for(int i=1;i<=n;i++)
out<<t[i]<<' ';
in.close();
out.close();
return 0;
}