#include <bits/stdc++.h>
#include <math.h>
using namespace std;
#define ll long long int
ll mod=998244353;
ll mul(ll a,ll b)
{
    return ((a%mod)*(b%mod))%mod;
}
ll add(ll a,ll b)
{
    return ((a%mod)+(b%mod))%mod;
}
ll sub(ll a,ll b)
{
    return (((a+mod)%mod)-((b+mod)%mod)+mod)%mod;
}
ll po(ll a, ll b)
{
    if(b==0)
    {
        return 1;
    }
    ll t=po(a,b/2);
    if(b%2)
    {
        return mul(t,mul(t,a));
    }
    else
    {
        return mul(t,t);
    }
}
ll fen[300005];
void upd(ll x, ll n)
{
	for(ll i=x;i<=n;i+=(i&(-i)))
	{
		fen[i]++;
	}
}
ll ret(ll x)
{
	ll out=0;
	for(ll i=x;i>0;i-=(i&(-i)))
	{
		out+=fen[i];
	}
	return out;
}
vector<ll> v[100005];
int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	cout<<fixed<<setprecision(12);
	ll t;
	cin>>t;
	while(t--)
	{
		ll n;
		cin>>n;
		for(ll i=0;i<n+3;i++)
		{
			v[i].clear();
		}
		
		ll a[n];
		unordered_map<ll,ll> m1;
		for(ll i=0;i<n;i++)
		{
			cin>>a[i];
			a[i]--;
			v[i].push_back(a[i]);
			m1[a[i]]++;
		}
		ll c[n];
		set<pair<ll,ll>> s1;
		for(ll i=0;i<n;i++)
		{
			cin>>c[i];
			s1.insert(make_pair(c[i],i));
		}
		queue<ll> q;
		for(ll i=0;i<n;i++)
		{
			if(m1[i]==0)
			{
				q.push(i);
			}
		}
		ll out=0;
		while(q.size())
		{
			auto it = q.front();
			q.pop();
			out+=(2*c[it]);
			m1[a[it]]--;
			if(m1[a[it]]==0)
			{
				q.push(a[it]);
			}
			auto it1 = s1.find(make_pair(c[it],it));
			s1.erase(it1);
		}
		for(auto i:s1)
					{
						cout<<i.first<<" "<<i.second<<"\n";
					}
		while(s1.size())
		{
			auto it =s1.begin();
			pair<ll,ll> p =(*it);
			s1.erase(it);
			ll ss = a[p.second];
			while(ss!=p.second)
			{
				out+=(2*c[ss]);
				auto it1 = s1.find(make_pair(c[ss],ss));
				s1.erase(it1);
				ss = a[ss];
				
			}
			
			out+=p.first;
		}
		cout<<out<<"\n";
	}
	return 0;
}