

//#pragma GCC optimize("Ofast")
//#pragma GCC target("avx2")

#include<bits/stdc++.h>
 
#define IOS ios::sync_with_stdio(false);cin.tie(nullptr)
#define all(x) x.begin(),x.end()
#define pb push_back
#define eb emplace_back
#define mkp make_pair
#define lc(x) ((x)<<1)
#define rc(x) (((x)<<1)|1)

using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef double ld;
 
const ll LINF=1e18;
const ll MOD=1e9+7;
const int INF=0x3f3f3f3f;
const int MAXE=10000050;
const int MAXN=300050;
const int bk_sz=3420;

vector<ll>G[MAXN],sum[MAXN];
int a[MAXN],u[MAXN],sz[MAXN];
ll sub[MAXN],ans[MAXN];

void mainwork(int T){
	int n;
	scanf("%d",&n);
	ll ssum=0;
	for(int i=1,tmp;i<=n;i++){
		G[i].clear();sum[i].clear();
		sz[i]=0;
		sub[i]=0,ans[i]=0;
		scanf("%d",u+i);
	}
	for(int i=1,tmp;i<=n;i++){
		scanf("%d",&tmp);
		G[u[i]].eb(tmp);
		ssum+=tmp;
		sz[u[i]]++;
	}
	for(int i=1;i<=n;i++){
		sort(all(G[i]));
		sum[i].eb(0);
		for(auto j:G[i]){
			sum[i].eb(sum[i].back()+j);
		}
		for(int j=2;j<=sz[i];j++){
			sub[j]-=sum[i][sz[i]%j]-sum[i][sz[i]%(j-1)];
		}
		sub[sz[i]+1]-=sum[i][sz[i]];
	}
	for(int i=1;i<=n;i++){
		ans[i]=ans[i-1]+sub[i];
	}
	for(int i=1;i<=n;i++){
		printf("%lld ",ssum+ans[i]);
	}
	puts("");
	
}
signed main(){
	//IOS;
	#ifndef ONLINE_JUDGE
	//freopen("./in.txt","r",stdin);
	//freopen("out.txt","w",stdout);
	#endif
	int t=1;
	scanf("%d",&t);
	//prework(MAXN-50);
	for(int i=1;i<=t;i++){
		mainwork(i);
	}
}