Pagini recente » Cod sursa (job #418798) | Cod sursa (job #1678642) | Cod sursa (job #2963687) | Cod sursa (job #2580027) | Cod sursa (job #443496)
Cod sursa(job #443496)
#include <cstdio>
#include <vector>
using namespace std;
FILE* fin=fopen("cerere.in","r");
FILE* fout=fopen("cerere.out","w");
#define MAX 100010
typedef vector<int>::iterator iter;
vector<int> arb[MAX];
int g[MAX],k[MAX],stack[MAX],sp=0,n;
void dfs(int nod){
if(k[nod]==0){
g[nod]=0;
}else{
g[nod]=g[stack[sp+1-k[nod]]]+1;
}
stack[++sp]=nod;
for(iter it=arb[nod].begin();it!=arb[nod].end();it++){
dfs(*it);
}
sp--;
}
int main(){
fscanf(fin,"%d ",&n);
for(int i=1;i<=n;i++){
fscanf(fin,"%d ",&k[i]);
}
int a,b;
for(int i=1;i<n;i++){
fscanf(fin,"%d %d\n",&a,&b);
arb[a].push_back(b);
}
dfs(1);
for(int i=1;i<=n;i++){
fprintf(fout,"%d ",g[i]);
}
fclose(fin);
fclose(fout);
return 0;
}