Pagini recente » Cod sursa (job #938239) | Cod sursa (job #1187736) | Cod sursa (job #846721) | Cod sursa (job #793039) | Cod sursa (job #393496)
Cod sursa(job #393496)
#include<fstream>
#include<vector>
using namespace std;
const char iname[]="cerere.in";
const char oname[]="cerere.out";
const int maxn=100005;
ifstream f(iname);
ofstream g(oname);
int a[maxn],i,n,x,y,k[maxn],notr[maxn],ans[maxn],s[maxn],p;
vector<int> E[maxn];
void go(int x)
{
s[++p]=x;
if(k[x]!=0)
ans[x]=ans[s[p-k[x]]]+1;
for(vector<int>::iterator it=E[x].begin();it!=E[x].end();++it)
go(*it);
s[p--]=0;
}
int main()
{
f>>n;
for(i=1;i<=n;++i)
f>>k[i];
for(i=1;i<n;++i)
f>>x>>y,E[x].push_back(y),notr[y]=1;
for(i=1;i<=n;++i)
if(notr[i]==0)
go(i);
for(i=1;i<=n;++i)
g<<ans[i]<<" ";
g<<"\n";
f.close();
g.close();
return 0;
}