Pagini recente » Cod sursa (job #2501311) | Cod sursa (job #683275) | Cod sursa (job #731529) | Cod sursa (job #3187085) | Cod sursa (job #2673086)
#include <iostream>
#include <fstream>
#include <cstdio>
using namespace std;
const int maxn=1e5;
int n,i,j,x,y,c;
int v[maxn],t[maxn];
void next();
void get(int & x);
int main()
{
freopen("cerere.in","r",stdin);
ofstream cout("cerere.out");
//cin>>n;
get(n);
for (i=1;i<=n;i++) get(v[i]);
for (i=1;i<n;i++)
{
//cin>>x>>y;
get(x);
get(y);
t[y]=x;
}
for (i=1;i<=n;i++)
{
c=0;
x=v[i];
y=i;
while (x!=0)
{
y=t[y];
for (j=1;j<x;j++)
{
y=t[y];
}
x=v[y];
c++;
}
cout<<c<<" ";
}
}
const int limit=200000000;
int r=limit-1;
char sir[limit];
bool semn=false;
void next()
{
if (r++==limit) fread(sir,1,limit,stdin),r=0;
}
void get(int & x)
{
x=0;
semn=false;
for (;sir[r]<'0' || sir[r]>'9';next()) if (sir[r]=='-') semn=true;
for (x=0;sir[r]>='0' && sir[r]<='9';next()) x=x*10+sir[r]-'0';
}