#include #include #include using namespace std; int n,k,i,x,y,ma,j,s[10004],c[10004]; struct spec { int a,b; }a[305]; struct nod { int nr; nod *urm; }*p,*v[10004]; void add(nod *&d,int x) { nod *p; p=new nod; p->nr=x; p->urm=d; d=p; } void BFS(int x,int y) { nod *p; s[1]=x; int l=1; c[x]=0; for(int i=1;i<=l;i++) for(p=v[s[i]];p!=0;p=p->urm) if(c[p->nr]==-1) { c[p->nr]=c[s[i]]+1; l++; s[l]=p->nr; } } bool cmp(spec x,spec y) { if(x.a>y.a)return 0; else if(x.a==y.a&&x.b>y.b)return 0; return 1; } int main() { // freopen("input","r",stdin); // freopen("output","w",stdout); scanf("%d %d",&n,&k); for(i=1;i<=k;i++) scanf("%d",&a[i].a); for(j=1;j<=k;j++) scanf("%d",&a[j].b); for(i=1;i<=n-1;i++) { scanf("%d %d",&x,&y); add(v[x],y); add(v[y],x); } sort(a+1,a+k+1,cmp); for(i=1;i<=k;i++) { if(a[i].a!=a[i-1].a) { memset(c,-1,sizeof(c)); BFS(a[i].a,a[i].b); } if(ma