Pagini recente » Cod sursa (job #2678622) | Cod sursa (job #2192533) | Cod sursa (job #309514) | Cod sursa (job #1607156) | Cod sursa (job #1438301)
#include <iostream>
#include <stdio.h>
using namespace std;
const int N=100420;
int n,nr,vf[N],urm[N],lst[N],a,b,v[N],r[N],rad;
int tata[N],drum[N];
bool ver[N];
void afisare(){
FILE * out;
out=fopen("cerere.out","w");
for(int i=1;i<=n;i++) fprintf(out,"%d ",r[i]);
}
void adauga(int x, int y){
nr++;
vf[nr]=y;
urm[nr]=lst[x];
lst[x]=nr;
}
void citire(){
FILE *in;
in=fopen("cerere.in","r");
fscanf(in,"%d",&n);
for(int i=1;i<=n;i++) fscanf(in,"%d",&v[i]);
for(int i=1;i<n;i++){
fscanf(in,"%d%d",&a,&b);
adauga(a,b);
tata[b]=a;
ver[b]=1;
}
for(int i=1;i<=n;i++) if(ver[i]==0) rad=i;
}
void dfs(int nod, int poz){
drum[poz]=nod;
if(v[nod]!=0) r[nod]=r[drum[poz-v[nod]]]+1;
int y,p;
p=lst[nod];
while(p!=0){
y=vf[p];
dfs(y,poz+1);
p=urm[p];
}cout<<1;
}
int main()
{
citire();
dfs(rad,0);
afisare();
return 0;
}