func_code_string: #include <bits/stdc++.h>   using namespace std;   template <class T>   ostream &operator<<(ostream &os, const pair<T, T> &p) {     return os <<  (  << p.first <<  ,  << p.second <<  ) ;   }   template <class T>   ostream &operator<<(ostream &os, const pair<const T, T> &p) {     return os <<  (  << p.first <<  ,  << p.second <<  ) ;   }   template <class T>   ostream &operator<<(ostream &os, const array<T, 3> &p) {     return os <<  (  << p[0] <<  ,  << p[1] <<  ,  << p[2] <<  ) ;   }   template <class T>   ostream &operator<<(ostream &os, const vector<T> &p) {     for (auto x : p) os << x <<    ;     return os;   }   const double EPS = 1e-9;   const double PI = acos(-1);   const int INF = 0x3f3f3f3f;   const long long LINF = 0x3f3f3f3f3f3f3f3f;   const long long mod = 1e9 + 7;   const int SZ = 2e5 + 20;   int ciclo[SZ];   int custo[SZ];   int go[SZ];   int vis[SZ];   int dfs1(int v) {     if (ciclo[v]) return ciclo[v];     if (vis[v]) return ciclo[v] = v;     vis[v] = 1;     return ciclo[v] = dfs1(go[v]);   }   int aux;   int tempo;   void dfs(int v) {     if (vis[v] < tempo) {       aux = 0;       return;     }     if (vis[v] == tempo) return;     vis[v] = tempo;     aux = min(aux, custo[v]);     dfs(go[v]);   }   int main() {     int n;     scanf(  %d , &n);     for (int i = 1; i < n + 1; i++) {       scanf(  %d , &custo[i]);     }     for (int i = 1; i < n + 1; i++) {       scanf(  %d , &go[i]);     }     for (int i = 1; i < n + 1; i++) dfs1(i);     long long res = 0;     memset(vis, INF, sizeof(vis));     for (int i = 1; i < n + 1; i++) {       aux = INF;       tempo += 2;       dfs(ciclo[i]);       res += aux;     }     cout << res <<   n ;     return 0;   }   