Pagini recente » Cod sursa (job #2332754) | Cod sursa (job #1827434) | Cod sursa (job #661763) | Cod sursa (job #2460318) | Cod sursa (job #1435737)
#include <cstdio>
using namespace std;
const int N=100001;
int vf[N];
int urm[2*N];
int lst[2*N];
int nr;
int str[N];
int v[N];
int sol[N];
bool viz[N];
void ad(int x,int y)
{
nr++;
vf[nr]=y;
urm[nr]=lst[x];
lst[x]=nr;
}
void dfs(int x)
{
int poz=lst[x];
v[++nr]=x;
viz[x]=true;
while(poz!=0)
{
if(str[vf[poz]]!=0)
{
sol[vf[poz]]=1+sol[v[nr-str[vf[poz]]]];
}
dfs(poz);
poz=urm[poz];
}
}
int main()
{
FILE *in,*out;
in=fopen("cerere.in","r");
out=fopen("cerere.out","w");
int n,i,j,x,y;
fscanf(in,"%d",&n);
for(i=1;i<=n;i++)
fscanf(in,"%d",&str[i]);
for(i=1;i<=n;i++)
{
fscanf(in,"%d%d",&x,&y);
ad(x,y);
ad(y,x);
}
nr=0;
dfs(1);
for(i=1;i<=n;i++)
fprintf(out,"%d ",sol[i]);
return 0;
}