#include<bits/stdc++.h>
using namespace std;
bool f1;
#define LL long long
#define Max(a,b) ((a)<(b))&&((a)=(b))
#define Min(a,b) ((a)>(b))&&((a)=(b))
int rd() {
	int res=0;char ch;
	bool f=false;
	while(ch=getchar(),ch<48||ch>57)if(ch=='-')f=true;
	do res=(res<<1)+(res<<3)+(ch^48);
	while(ch=getchar(),ch>47&&ch<58);
	return f?-res:res;
}
const int M=2e6+5;
int T;
int hd[M],to[M],nx[M];
void add(int u,int v) {
	nx[++Tot]=hd[u];
	to[Tot]=v;hd[u]=Tot;	
}
bool f2;
int main() {
//	printf("%lf\n",(&f2-&f1)/1024.0/1024.0);
	freopen("dfs.in","r",stdin);
	freopen("dfs.out","w",stdout);
	T=rd();
	while(T--) {
		n=rd(),root=rd();Tot=0;
		for(int i=1; i<=n; ++i)in[i]=hd[i]=0;
		for(int i=1; i<=n; ++i)a[i]=rd();
		for(int i=1; i<n; ++i) {
			int u=rd(),v=rd();
			add(u,v),add(v,u);
		}
	}
	return 0;
}

