Pagini recente » Cod sursa (job #2552111) | Cod sursa (job #799206) | Cod sursa (job #904638) | Cod sursa (job #515151) | Cod sursa (job #2570417)
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
vector<int> stiva;
vector<int> v[100005];
int ask[100005], gen[100005];
char ts[100005];
void dfs(int a) {
stiva.push_back(a);
ask[a]=stiva[stiva.size()-gen[a]-1];
for (int i=0;i<v[a].size();i++) {
dfs(v[a][i]);
}
stiva.pop_back();
}
int main()
{
int i, n, a, b;
FILE *fin, *fout;
fin=fopen("cerere.in" ,"r");
fout=fopen("cerere.out" ,"w");
fscanf(fin, "%d" ,&n);
for (i=1;i<=n;i++) {
fscanf(fin, "%d" ,&gen[i]);
}
for (i=1;i<n;i++) {
fscanf(fin, "%d%d" ,&a ,&b);
v[a].push_back(b);
ts[b]=1;
}
i=1;
while (ts[i]==1) {i++;}
dfs(i);
for (i=1;i<=n;i++) {
a=i;
int cnt=0;
while (ask[a]!=a) {
cnt++;
a=ask[a];
}
fprintf(fout, "%d " ,cnt);
}
return 0;
}