Pagini recente » Cod sursa (job #2310373) | Cod sursa (job #733323) | Cod sursa (job #2757607) | Cod sursa (job #2717974) | Cod sursa (job #562723)
Cod sursa(job #562723)
#include<stdio.h>
#include<vector>
using namespace std;
FILE*f=fopen("cerere.in","r");
FILE*g=fopen("cerere.out","w");
vector <int> v[100001];
int sol[100001],k,n,x,y,w[100001],j,s[100001],i;
char viz[100001];
void dfs(int nod,int niv){
viz[nod]=1;
s[niv]=nod;
if(w[nod])
sol[nod]=sol[s[niv-w[nod]]]+1;
else
sol[nod]=0;
for(int i=0;i<v[nod].size();++i)
if(viz[v[nod][i]]==0)
dfs(v[nod][i],niv+1);
}
int main() {
fscanf(f,"%d",&n);
for(i=1;i<=n;++i)
fscanf(f,"%d",&w[i]);
for(i=1;i<n;++i){
fscanf(f,"%d%d",&x,&y);
v[x].push_back (y);
}
for(i=1;i<=n;++i)
if(viz[i]==0)
dfs(i,1);
for(i=1;i<=n;++i)
fprintf(g,"%d ",sol[i]);
fclose(g);
fclose(f);
return 0;
}