#include<stdio.h>
#include<stdlib.h>

int compar (const void *a, const void *b) {
  return *(int *)a - *(int *)b;
}

int main(void)
{
	int i,j,h,l[801],k,p[801][801],deg[801],dis[801][801],dis1[801],d,S,t;
	while(1)
	{
		scanf("%d",&k);
		if(k==0) break;
		for(i=0;i<=k;i++)
		{
			for(j=0;j<=k;j++)
			{
				p[i][j]=0;
				dis[i][j]=0;
			}
			deg[i]=0;
		}
		l[0]=0;
		l[1]=0;
		for(i=2;i<=k;i++)
		{
			scanf("%d",&l[i]);
			p[i][l[i]]=1;
			p[l[i]][i]=1;
		}
		for(i=2;i<=k;i++)
		{
			scanf("%d",&d);
			dis[i][l[i]]=d;
			dis[l[i]][i]=d;
		}
		t=0;
		for(i=0;i<=k-1;i++)
		{
			for(j=i+1;j<=k;j++)
			{
				t+=dis[i][j];
			}
		}
		for(i=1;i<=k;i++)
		{
			S=0;
			for(j=1;j<=k;j++)
			{
				S+=p[i][j];
			}
			deg[i]=S;
		}
		for(i=1;i<=k-1;i++)
		{
			if(deg[i]>=2)
			{
			    h=0;
			    for(j=i+1;j<=k;j++)
			    {
				    if(p[i][j]==1)
				    {
					    if(deg[j]>=2)
					    {
						    dis1[h]=dis[i][j];
						    h++;
					    }
				    }
			    }
			    qsort(dis1,h-1,sizeof(int),compar);
			    h--;
			    for(j=0;j<=h-2;j++)
			    {
				    t+=dis1[j];
			    }
			    for(j=i+1;j<=k;j++)
			    {
				    if(p[i][j]==1)
				    {
					    if(deg[j]>=2)
					    {
						    t+=dis[i][j];
						    dis[i][j]=100001;
						    dis[j][i]=100001;
					    }
				    }
			    }
		    }
		}
		printf("%d\n",t);
	}
	return 0;
}