Pagini recente » Cod sursa (job #2030274) | Cod sursa (job #2914715) | Cod sursa (job #1398249) | Cod sursa (job #1672717) | Cod sursa (job #363334)
Cod sursa(job #363334)
#include <stdio.h>
#define DIM 100005
#define LOG 25
int a[LOG][DIM];
int p[DIM],rez[DIM],viz[DIM];
int n;
void read ()
{
int i,x,y;
scanf ("%d",&n);
for (i=1; i<=n; ++i)
scanf ("%d",&p[i]);
for (i=1; i<n; ++i)
{
scanf ("%d%d",&x,&y);
a[0][y]=x;
}
}
void init ()
{
int i,j,nr,ok;
for (ok=i=1; ok; ++i)
{
for (ok=0, j=1; j<=n; ++j)
{
nr=a[i-1][j];
if (nr)
{
ok=1;
a[i][j]=a[i-1][nr];
}
}
}
}
int stramos (int p,int q)
{
int ct;
for (ct=0; p && q; p>>=1, ++ct)
if (p&1)
q=a[ct][q];
return q;
}
void solve (int start)
{
int i,t;
viz[start]=1;
t=stramos (p[start],start);
if (!viz[t])
solve (t);
rez[start]=rez[t]+1;
}
void print ()
{
int i;
for (i=1; i<=n; ++i)
{
if (!viz[i])
solve (i);
printf ("%d ",rez[i]-1);
}
}
int main ()
{
freopen ("cerere.in","r",stdin);
freopen ("cerere.out","w",stdout);
read ();
init ();
print ();
return 0;
}