Pagini recente » Cod sursa (job #3181146) | Cod sursa (job #2556178) | Cod sursa (job #1020085) | Cod sursa (job #681483) | Cod sursa (job #774030)
Cod sursa(job #774030)
#include<fstream>
#include<vector>
#include<cstring>
using namespace std;
int i,j,n,m,x,y,g[100001],s[100001],t[100001],nr;
vector<int> a[100001];
int viz[100001];
void dfs(int x,int xx,int crt)
{
int i;
viz[x]=1;
++nr;
if(nr==crt)
{
t[xx]=x;
return ;
}
for(i=0;i<a[x].size();++i)
if(!viz[a[x][i]])
dfs(a[x][i],xx,crt);
}
int det(int x)
{
if(t[x])
++nr,det(t[x]);
return nr;
}
int main()
{
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;++i)
scanf("%d",&s[i]);
for(i=1;i<n;++i)
{
scanf("%d%d",&x,&y);
a[y].push_back(x);
}
for(i=1;i<=n;++i)
if(s[i])
{
memset(viz,0,sizeof(viz));
nr=-1,dfs(i,i,s[i]);
}
for(i=1;i<=n;++i)
nr=0,printf("%d ",det(i));
return 0;
}