Pagini recente » Cod sursa (job #1803621) | Cod sursa (job #1990325) | Cod sursa (job #1454471) | Cod sursa (job #1274765) | Cod sursa (job #358224)
Cod sursa(job #358224)
#include<cstdio>
#include<vector>
#define N 1<<17
using namespace std;
int n,k,str[N],v[N],re[N];
bool t[N];
vector<int> a[N];
void dfs(int x)
{
v[++k]=x;// al k-lea stramos curent
if(str[x]) re[x]=re[v[k-str[x]]]+1;// adun la maimuta curenta re[al q-lea stramos]+1
else re[x]=0;
for(size_t i=0;i<a[x].size();++i) dfs(a[x][i]);
--k; //scad numarul de stramosi
}
int main()
{
int x,y,i,rez;
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;++i) scanf("%d",&str[i]);
for(i=1;i<n;++i)
{
scanf("%d%d",&x,&y);
t[y]=1;
a[x].push_back(y);
}
for(int i=1 ; i<=n ; ++i) if(!t[i]) rez=i;
dfs(rez);//rez este primul stramos, de la care se face dfs
for(i=1;i<=n;i++)
printf("%d ",re[i]);
return 0;
}