```go
package main
import (
"bufio"
"os"
"sort"
"strconv"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Split(bufio.ScanWords)
readInt := func() int {
scanner.Scan()
v, _ := strconv.Atoi(scanner.Text())
return v
}
t := readInt()
out := bufio.NewWriter(os.Stdout)
for ; t > 0; t-- {
n := readInt()
u := make([]int, n)
for i := 0; i < n; i++ {
u[i] = readInt()
}
s := make([]int, n)
for i := 0; i < n; i++ {
s[i] = readInt()
}
univSkills := make(map[int][]int, n)
for i := 0; i < n; i++ {
univ := u[i]
univSkills[univ] = append(univSkills[univ], s[i])
}
combined := make(map[int][]int64)
for _, skills := range univSkills {
sort.Slice(skills, func(a, b int) bool {
return skills[a] > skills[b]
})
m := len(skills)
if combined[m] == nil {
combined[m] = make([]int64, m+1)
}
pref := combined[m]
var sum int64
for i, val := range skills {
sum += int64(val)
pref[i+1] += sum
}
}
ans := make([]int64, n+1)
for m, pref := range combined {
for k := 1; k <= m; k++ {
idx := m - (m % k)
ans[k] += pref[idx]
}
}
for i := 1; i <= n; i++ {
if i > 1 {
out.WriteByte(' ')
}
out.WriteString(strconv.FormatInt(ans[i], 10))
}
out.WriteByte('\n')
}
out.Flush()
}
```