```go
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Split(bufio.ScanWords)
scanner.Scan()
t := atoi(scanner.Text())
for tc := 0; tc < t; tc++ {
scanner.Scan()
n := atoi(scanner.Text())
a := make([]int, n)
b := make([]int, n)
for i := 0; i < n; i++ {
scanner.Scan()
a[i] = atoi(scanner.Text())
}
for i := 0; i < n; i++ {
scanner.Scan()
b[i] = atoi(scanner.Text())
}
sum := 0
d := 0
c := 0
for i := 0; i < n; i++ {
ai := a[i]
bi := b[i]
if ai == bi {
sum += ai
if ai == 1 || ai == -1 {
c++
}
} else if ai > bi {
sum += ai
d += ai
} else {
sum += bi
d -= bi
}
}
absD := d
if absD < 0 {
absD = -absD
}
var minDiff int
if absD > c {
minDiff = absD - c
} else {
if (absD % 2) == (c % 2) {
minDiff = 0
} else {
minDiff = 1
}
}
ans := (sum - minDiff) / 2
fmt.Println(ans)
}
}
func atoi(s string) int {
n := 0
neg := false
for i, ch := range s {
if i == 0 && ch == '-' {
neg = true
continue
}
n = n*10 + int(ch-'0')
}
if neg {
return -n
}
return n
}
```