#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#include<math.h>
using namespace std;
#define INF 0x3f3f3f3f
#define N 12345
int k;
int a[N],aa[N],dis[N];
struct node
{
int e,f,v;
}q[N<<2];
void add(int e,int f)
{
q[k].e=e;
q[k].f=f;
q[k].v=aa[e];
aa[e]=k++;
}
int dfs(int s)
{
int sum=0;
for(int i=aa[s];i!=-1;i=q[i].v)
{
int f=q[i].f;
if(!dis[f])
{
dis[f]=1;
sum+=dfs(f);
}
}
return max(a[s],sum);
}
int main()
{
int T,m,n,e,f;
scanf("%d",&T);
while(T--)
{
k=0;
memset(aa,-1,sizeof(aa));
memset(dis,0,sizeof(dis));
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=1;i<n;i++)
{
scanf("%d%d",&e,&f);
add(e,f);
add(f,e);
}
dis[m]=1;
printf("%d\n",dfs(m));
}
return 0;
}