#include<bits/stdc++.h>
#define ll long long
#define MAXN 100005
using namespace std;
int ind[MAXN]={0};
struct node{
	int x,w;
	friend bool operator<(const node a,const node b)
	{
		return a.w<b.w;
	}
};
priority_queue<node> q;
int main(){
	int t;
	scanf("%d",&t);
	while(t--){
		int n;
		scanf("%d",&n);
		ll ans=0;
		for(int i=0;i<=n;i++)
		  ind[i]=0;
        for(int i=1;i<=n;i++){
        	node x;
        	x.x=i;
			scanf("%d",&x.w);
		    q.push(x);
		    ans+=x.w;
		}
		for(int i=1;i<n;i++){
			int u,v;
			scanf("%d%d",&u,&v);
			ind[u]++;
			ind[v]++;
		}
		printf("%lld ",ans);
		for(int i=2;i<n;i++){
	        if(q.empty())continue;
			int u=q.top().x;
			int w=q.top().w;
			while(ind[u]<=1){
				q.pop();
				u=q.top().x;
				w=q.top().w;
			} 
			ind[u]--;
	        if(ind[u]<=1)q.pop();
	        ans+=w;
	        printf("%lld ",ans);
		}
		printf("\n");
		while(!q.empty())q.pop();
	}
	return 0;
}