Pagini recente » Cod sursa (job #2017516) | Cod sursa (job #1792446) | Cod sursa (job #1809879) | Cod sursa (job #1760277) | Cod sursa (job #1142024)
#include <fstream>
using namespace std;
fstream f("cerere.in",ios::in);
fstream g("cerere.out",ios::out);
const long nmax=100005;
long n,xx,yy,x[nmax],s[nmax],a[18][nmax],i,j,nr;
void read()
{
f>>n;
for (i=1;i<=n;i++) f>>s[i];
for (i=1;i<n;i++)
{
f>>xx>>yy;
x[yy]=xx;
}
}
void ancestors()
{
for (j=1;j<=n;j++) a[0][j]=x[j];
for (i=1;i<=17;i++)
for (j=1;j<=n;j++)
a[i][j]=a[i-1][a[i-1][j]];
}
long lookforancestor(int nod,int p)
{
int k;
for (k=17;k>=0;k--)
if (p&(1<<k)) nod=a[k][nod];
return nod;
}
void solve()
{
int q;
for (i=1;i<=n;i++)
{
q=i;
nr=0;
while (s[q]!=0)
{
nr++;
q=lookforancestor(q,s[q]);
}
g<<nr<<" ";
}
}
int main()
{
read();
ancestors();
solve();
f.close();g.close();
return 0;
}