Pagini recente » Cod sursa (job #2969584) | Cod sursa (job #2094574) | Cod sursa (job #1766882) | Cod sursa (job #1513958) | Cod sursa (job #1652628)
#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[17][NMax];
int main()
{
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;
}