rt
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e6+6;
const int M=1e3+7;
const int IM=2147483647;
const long long LLM=922337203685475807;
inline int read()
{
int x=0,y=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-') y=-y;c=getchar();}
while(c>='0'&&c<='9'){x=x*10+(c^'0');c=getchar();}
return x*y;
}
int n,m,s,cnt,tot,ans;
int a[N],b[N];
bool vis[N];
vector<int>r0,r1;
signed main()
{
int T=read();
while(T--)
{
n=read();
int l0=0,l1=0;
ans=LLM;
r0.clear();
r1.clear();
for(int i=1;i<=n;i++) a[i]=read();
for(int i=1;i<=n;i++)
{
b[i]=read();
if(!b[i])
{
if(!l0) l0=i,r0.push_back(i);
else r0.push_back(i),vis[i]=false;
}
else
{
if(!l1) l1=i,r1.push_back(i);
else r1.push_back(i),vis[i]=true;
}
}
if(!l0||!l1) printf("%lld\n",a[1]+a[n]);
else if(l0==1)
{
if(r0[r0.size()-1]==n) printf("%lld\n",a[1]+a[n]);
else
{
for(int i=0;i<r0.size();i++)
{
int R=r0[i];
if(vis[R+1]==true) ans=min(ans,a[1]+a[R]+a[R+1]+a[n]);
}
printf("%lld\n",ans);
}
}
else
{
if(r1[r1.size()-1]==n) printf("%lld\n",a[1]+a[n]);
else
{
for(int i=0;i<r1.size();i++)
{
int R=r1[i];
if(vis[R+1]==false) ans=min(ans,a[1]+a[R]+a[R+1]+a[n]);
}
printf("%lld\n",ans);
}
}
}
return 0;
}