显示代码纯文本
#include <iostream>
#include <cstdio>
using namespace std;
int n,a[1000001],b[1000001],ma[1000001];
bool visited[1000001];
int main()
{
freopen("ghost.in","r",stdin);
freopen("ghost.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++)
{
scanf("%d",a+i);
ma[a[i]]=i;
}
for(int i=1;i<=n;i++)
{
scanf("%d",b+i);
}
int res=0;
for(int i=1;i<=n;i++)
{
if(visited[i]||a[i]==b[i])continue;
int j=i,cnt=-1,min=1000000000;
do
{
visited[j]=1;
res+=b[j];
if(b[j]<min)min=b[j];
j=ma[b[j]];
cnt++;
}while(b[j]!=a[i]);
visited[j]=1;
res+=b[j];
if(b[j]<min)min=b[j];
res+=cnt*min;
}
cout<<res<<endl;
return 0;
}