Pagini recente » Cod sursa (job #1219268) | Cod sursa (job #2027109) | Cod sursa (job #67204) | Cod sursa (job #524709) | Cod sursa (job #1652626)
#include <fstream>
#include <cstdio>
#include <vector>
#include <queue>
#include <set>
#include <stack>
#include <cmath>
#include <algorithm>
#include <iomanip>
#include <cstring>
#define NMax 100005
using namespace std;
ifstream f("cerere.in");
ofstream g("cerere.out");
int n,x,y;
int d[NMax];
int a[18][NMax];
int main()
{
/* freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout); */
f >> n;
for(int i = 1; i <= n; ++i){
f >> d[i];
}
for(int i = 1; i < n; ++i){
f >> x >> y;
a[0][y] = x;
}
for(int i = 1; (1<<i) <= n; ++i){
for(int j = 1; j <= n; ++j){
a[i][j] = a[i - 1][a[i - 1][j]];
}
}
for(int i = 1; i <= n; ++i){
int index = i,prev = d[i];
int ok = 1;
int s = 0;
while(ok){
if(d[index] == 0)
break;
s += 1;
prev = d[index];
for(int j = 0; (1<<j) <= n; ++j){
if((1<<j) & prev){
index = a[j][index];
}
}
}
g << s << " ";
}
return 0;
}