显示代码纯文本
#include <cstdio>
using namespace std;
int ava=1,way[200001],nextway[200001],ptow[100001],dad[100001];
bool right[100001]={0},used[100001];
void addway(int x,int y)
{
int pos;
pos=ptow[x];
if (pos==0)
{
ptow[x]=ava;
way[ava++]=y;
}
else
{
while (nextway[pos])
pos=nextway[pos];
nextway[pos]=ava;
way[ava++]=y;
}
}
void filldad(int from,int pos)
{
dad[pos]=from;
used[pos]=true;
int poi;
poi=ptow[pos];
while (poi)
{
if (!used[way[poi]])
filldad(pos,way[poi]);
poi=nextway[poi];
}
used[pos]=false;
}
int main(void)
{
freopen("seat.in","r",stdin);
freopen("seat.out","w",stdout);
int i,n,x,y,c,temp;
scanf("%d",&n);
for (i=1;i<n;i++)
{
scanf("%d%d",&x,&y);
addway(x,y);
addway(y,x);
}
filldad(0,1);
for (i=1;i<=n;i++)
{
scanf("%d",&x);
c=0;
temp=x;
while (x)
{
c+=right[x];
x=dad[x];
}
printf("%d\n",c);
right[temp]=1;
}
return(0);
}