#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2,fma")
#pragma GCC optimization("unroll-loops")
const long long MAXN = 2e5 + 1;
long long adj[MAXN];
long long st[MAXN];
long long cost[MAXN];
long long ans = 0;
void dfs(long long s) {
  st[s] = 1;
  if (adj[s] == s) {
    ans += cost[s];
  } else {
    if (st[adj[s]] == 0) {
      dfs(adj[s]);
    } else if (st[adj[s]] == 1) {
      long long x = cost[s];
      long long v = adj[s];
      while (v != s) {
        x = min(x, cost[v]);
        v = adj[v];
      }
      ans += x;
    }
  }
  st[s] = 2;
}
int main() {
  long long n;
  cin >> n;
  for (long long i = 1; i < n + 1; i++) cin >> cost[i];
  for (long long i = 1; i < n + 1; i++) {
    st[i] = 0;
    cin >> adj[i];
  }
  for (long long i = 1; i < n + 1; i++) {
    if (st[i] == 0) dfs(i);
  }
  cout << ans << "\n";
  return 0;
}
