Pagini recente » Cod sursa (job #1202147) | Diferente pentru problema/plus2 intre reviziile 6 si 10 | Rezultatele filtrării | Diferente pentru problema/joc6 intre reviziile 18 si 19 | Cod sursa (job #2599320)
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100005;
int cer[MAXN], stramos[MAXN][30];
int main()
{
ifstream fin("cerere.in");
ofstream fout("cerere.out");
int n;
fin >> n;
for(int i = 1; i <= n; ++i)
fin >> cer[i];
for(int i = 1; i < n; ++i){
int x, y;
fin >> x >> y;
stramos[y][0] = x;
}
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= 20; ++j)
stramos[i][j] = stramos[stramos[i][j - 1]][j - 1];
for(int i = 1; i <= n; ++i){
int crt = i, cnt = 0;
while(cer[crt] > 0){
int niv = cer[crt];
for(int pas = 20; pas >= 0; --pas){
if((1 << pas) <= niv){
crt = stramos[crt][pas];
niv -= (1 << pas);
}
}
cnt++;
}
fout << cnt << " ";
}
return 0;
}